在 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
正在删除您提供给它的所有字符。包括/ : 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
模式中的括号表示要返回匹配的哪一部分。
我是一个相当新的程序员。
我目前正在尝试从 .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
正在删除您提供给它的所有字符。包括/ : 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
模式中的括号表示要返回匹配的哪一部分。