很抱歉,如果我的问题太基础了。我的结果保存为FORTRAN的文本文件,我必须使用Python进行后期处理。我尝试使用split
函数来分隔不同的列,但是,不同列之间的空间并不总是相等。那么有办法解决我的问题吗?以下是数据:
2/ 1/1961 0.0000 0.0019 --------- 0.749E+04 0.353E-02 0.374E-03
2/ 2/1961 0.0000 0.0021 --------- 0.748E+04 0.353E-02 0.374E-03
2/ 3/1961 0.0000 0.0000 --------- 0.743E+04 0.350E-02 0.371E-03
2/ 4/1961 0.0000 0.0000 --------- 0.732E+04 0.345E-02 0.366E-03
2/ 5/1961 24.0000 24.0000 0.416E-01 0.719E+04 0.339E-02 0.360E-03
2/ 6/1961 24.0000 0.0000 0.509E-01 0.706E+04 0.333E-02 0.353E-03
我需要在Python中将每列保存为单独的变量。如果我使用两个空格作为分隔符,我会将2/ 5/1961 24.0000
作为一个变量。如果我使用单个空格,我会得到,
2
,/
,...那么有没有办法处理我的文本文件?谢谢!
x_date=[]
fp = open("results_file.txt")
for i, line in enumerate(fp):
if (i >= line_start) and (i <= line_end):
line = line.split(' ')
x_date_temp = line[0]
x_date.append(x_date_temp)
答案 0 :(得分:3)
如果这是来自Fortran,它几乎肯定是固定宽度字段,而不是空格分隔,因此以这种方式阅读它是个好主意。如果第二个字段可以是“124.0000”,那么这两个字段之间就不会有空格。
Python并没有一种很好的内置方式来读取固定宽度字段(就像它对csv一样)。
虽然使用正则表达式也不错import re
x_date = []
fp = open("results_file.txt")
for i, line in enumerate(fp):
if (i >= line_start) and (i <= line_end):
line = re.match("(.{10})(.{8})(.{8})(.{12})(.{12})(.{12})(.{12})", line).groups()
x_date_temp = line[0]
x_date.append(x_date_temp)
您还可以重新制作像这样的字段的词典
line_dict = re.match("(?P<date>.{10})"
"(?P<field1>.{8})"
"(?P<field2>.{8})"
"(?P<field3>.{12})"
"(?P<field4>.{12})"
"(?P<field5>.{12})"
"(?P<field6>.{12})", line).groupdict()
答案 1 :(得分:2)
您可以使用替换函数从字符串中删除'/',然后应用不带参数的拆分,这将给出我想要的结果。试试这个:
with open("results_file.txt") as f:
x_date = [line.replace('/ ', '/').split() for line in f]
答案 2 :(得分:1)
你可以做这样的事情
In [2]: l = " 2/ 1/1961 0.0000 0.0019 --------- 0.749E+04 0.353E-02 0.374E-03"
# this will eliminate the blank elements in the list
In [3]: [x for x in l.split() if x]
Out[3]:
['2/',
'1/1961',
'0.0000',
'0.0019',
'---------',
'0.749E+04',
'0.353E-02',
'0.374E-03']
答案 3 :(得分:0)
line = line.split()
可能会有帮助。
答案 4 :(得分:0)
易
L = "2/ 1/1961 0.0000 0.0019 --------- 0.749E+04 0.353E-02 0.3"
N = [x for x in L.split()]
print (N[3])
N [3]的输出例如是0.0019
答案 5 :(得分:0)
import re
f = open('results_file.txt', 'r')
data = [ re.split(r'\s+', line, maxsplit=7) for line in f]
for line in data:
print line
>>>
['2/', '1/1961', '0.0000', '0.0019', '---------', '0.749E+04', '0.353E-02', '0.374E-03\n']
['2/', '2/1961', '0.0000', '0.0021', '---------', '0.748E+04', '0.353E-02', '0.374E-03\n']
['2/', '3/1961', '0.0000', '0.0000', '---------', '0.743E+04', '0.350E-02', '0.371E-03\n']
['2/', '4/1961', '0.0000', '0.0000', '---------', '0.732E+04', '0.345E-02', '0.366E-03\n']
['2/', '5/1961', '24.0000', '24.0000', '0.416E-01', '0.719E+04', '0.339E-02', '0.360E-03\n']
['2/', '6/1961', '24.0000', '0.0000', '0.509E-01', '0.706E+04', '0.333E-02', '0.353E-03']