我想读取一个包含字符串的文件,比如标题,然后是一个数组。我想为每个块生成一个python数组并将它们保存在一个不同的文件中,如下面的LI 1将是一个4 x 4的数组。
LI 1
10. 20. 30. 40.
10. 21. 30. 40.
10. 22. 31. 43.
10. 23. 35. 45.
LI 2
11. 20. 40. 50.
11.2 22. 42. 52.
LI 3
15. 23. 40. 50.
15. 24. 41. 51.
15.2 25. 42. 52.
LI 10
10.3 26. 30. 40.
10.2 27. 30. 40.
10.3 28. 31. 43.
LI 3
15. 23. 40. 50.
15. 24. 41. 51.
15.2 25. 42. 52.
我知道如何输入字符串“LI 1”,“LI 2”....但是当LI(数字)重复时也会出现问题,例如下面例子中的“LI 3”,因为我想让他们在不同的档案中。对于下面的文件,我想有5个不同的输出。什么应该是正确的方法?我做的那一刻,例如'LI 2':
with open(file) as infile:
for line in infile:
if 'LI 2' in line:
found_type = True
continue
if found_type:
if 'LI' in line:
found_type = False #stops when reach the next LI
else:
x.append(line[2:15])
y.append(line[16:29])
d1.append(line[31:43])
d2.append(line[45:57])
xf=filter(None,x)
yf=filter(None,y)
d1f=filter(None,d1)
d2f=filter(None,d2)
out=np.array([xf,yf,d1f,d2f])
out=out.T.astype(np.float)
np.savetxt('LI_2.dat',out,delimiter=' ',fmt='%1.8f')
答案 0 :(得分:0)
这样的事情可能有用。读取行然后进行数字转换。从您的代码中,我不确定您是否要为每个块或所有块组合进行单独的过滤和文件。所以我假设了前者。希望这有帮助!
import string
import random
lines = ''
output_folder ='folder/'
with open(file) as infile:
lines = infile.readlines()
for line in lines:
if 'LI' in line:
x=[]
y=[]
d1=[]
d2=[]
output = output_folder + line.strip()+ random.choice(string.letters) + '.dat'
elif line =='\n':
pass
else:
numbers = line.split()
x.append(float(numbers[0]))
y.append(float(numbers[1]))
d1.append(float(numbers[2]))
d2.append(float(numbers[3]))
xf=filter(None,x)
yf=filter(None,y)
d1f=filter(None,d1)
d2f=filter(None,d2)
out=np.array([xf,yf,d1f,d2f])
out=out.T.astype(np.float)
np.savetxt(output,out,delimiter=' ',fmt='%1.8f')