我是一个相当新的程序员。
我目前正在尝试从.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()
有什么明显表明我做错了吗?
感谢阅读。任何有用的回复将不胜感激。
答案 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
正在删除您提供给它的所有字符。包括/ : e
。
strip('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
模式中的括号表示要返回的匹配部分。