在 Python 中向 string/array 添加剥离线

Adding stripped line to string/array in Python

我是一个相当新的程序员。

我目前正在尝试从 .txt 文件中查找数据并将它们添加到字符串或数组中,然后最终将其添加到 .csv 文件中。

我正在查看的数据目前以这种形式存在,在每个 .txt 文件中以随机间隔出现多次:

' 线通量:3.0008e-19 +/- 2.6357e-21 [W/cm^2]'

因此,在阅读了几种访问它的方法后,我想出了一个不会产生任何错误但也不会打印任何内容的代码:

cwd = os.getcwd()

def open_txt():
    flux = {}
    for file in cwd:
        if file.endswith('.txt'):
            f = open(file,'r')
            lines = f.readlines()
            for line in lines:
                if line.startswith(' Line Flux:'):
                    line.strip(' Line Flux:                        ' + '[W/cm^2]')
                    flux.append(line)
                    print flux

open_txt()

有没有明显我做错的地方?

感谢阅读。任何有用的回复将不胜感激。

这应该有效:

cwd = os.getcwd()

def open_txt():
    flux = []
    for file in os.listdir(cwd):
        if file.endswith('.txt'):
            with open(file,'r') as f:
                lines = f.readlines()
                for line in lines:
                    if line.startswith(' Line Flux:'):
                        output_line = line[11:-8]
                        flux.append(output_line)
                print flux

open_txt()

我使用 with open 来确保文件正确关闭。

Python 切片符号,用于删除第一个和最后一个字符。

将通量更改为列表而不是字典。

我还将 print 语句移出了 for 循环,这样它就只打印完成的数组。

getcwd returns a string, so i think this is where your bug is. You are iterating through each letter of the string. Perhaps you need listdir

您可能也想检查这个 link


如果不是这种情况,您可以尝试插入 "print marker" 并查看它是否完全打开文件

cwd = os.getcwd()

def open_txt():

    # This has to be a list, not a dict.
    flux = []
    for file in cwd:       

        if file.endswith('.txt'):
            # Check loop is entered, with this print marker
            print 'it opened file: %s'% file

            f = open(file,'r')
            lines = f.readlines()
            for line in lines:
                if line.startswith(' Line Flux:'):
                    line.strip(' Line Flux:                        ' + '[W/cm^2]')
                    flux.append(line)
                    print flux

open_txt()

此外,strip 正在删除您提供给它的所有字符。包括/ : estrip('ab'+'cz') 等同于 strip('acbz')

您可以使用 regular expressions

import re

my_str = ' Line Flux: 3.0008e-19 +/- 2.6357e-21 [W/cm^2]'

pattern = re.compile(r'Line Flux: (.*?)\[W/cm\^2\]')
result = re.findall(pattern, my_str)

print result

模式中的括号表示要返回匹配的哪一部分。