在Python中向字符串/数组添加剥离的行

时间:2015-01-30 16:15:39

标签: python strip readlines startswith

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

我目前正在尝试从.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()

有什么明显表明我做错了吗?

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

2 个答案:

答案 0 :(得分:1)

这应该有效:

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()

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

Python切片表示法,用于指定第一个和最后一个字符。

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

我还将打印状态移出for循环,以便它只打印完成的数组。

答案 1 :(得分:0)

getcwd返回一个字符串,所以我认为这是你的bug所在。您正在遍历字符串的每个字母。也许你需要listdir

您也可以查看此link


如果不是这种情况,您可以尝试插入“打印标记”并查看它是否打开文件

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

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