我是python的新手,现在我在学习项目时遇到了一些问题。基本上我尝试从列中格式化的文本文件中读取数据。我将数据存储在列表列表中,并对数据进行排序和操作,并将它们再次写入文件。我的问题是将书面数据与正确的列对齐。我发现了一些像
这样的方法“%i,%f,%e”%(1000,1000,1000)
但我不知道会有多少列。所以我想知道是否有办法将所有列设置为固定宽度。
这是输入数据的样子:
2 232.248E-09 74.6825 2.5 5.00008 499.482
5 10. 74.6825 2.5 -16.4304 -12.3
这就是我将数据存储在列表列表中的方式:
filename = getInput('MyPath', workdir)
lines = []
f = open(filename, 'r')
while 1:
line = f.readline()
if line == '':
break
splitted = line.split()
lines.append(splitted)
f.close()
为了写入数据,我首先将列表列表的所有行元素放入一个字符串中,并在元素之间留出一个空闲的固定空间。但相反,我需要一个固定的总空间,包括元素。但我也不知道文件中的列数。
for k in xrange(len(lines)):
stringlist=""
for i in lines[k]:
stringlist = stringlist+str(i)+' '
lines[k] = stringlist+'\n'
f = open(workdir2, 'w')
for i in range(len(lines)):
f.write(lines[i])
f.close()
此代码基本上可以正常工作,但遗憾的是输出格式不正确。
非常感谢您提前就此问题提供任何帮助!
答案 0 :(得分:0)
可以采用字符串格式化:
>>> print("%10s%9s" % ("test1", "test2"))
test1 test2
虽然你可能想先从这些数字创建字符串,然后按照我上面的说明格式化它们。
我无法完全理解您的编写代码,但尝试以某种方式处理它:
from itertools import enumerate
with open(workdir2, 'w') as datei:
for key, item in enumerate(zeilen):
line = "%4i %6.6" % key, item
datei.write(item)
答案 1 :(得分:0)
您完全可以使用字符串格式设置格式化宽度。但正如你正确指出的那样,棘手的一点是为可变大小的输出列表做这个。相反,您可以使用join()函数:
output = ['a', 'b', 'c', 'd', 'e',]
# format each column (len(a)) with a width of 10 spaces
width = [10]*len(a)
# write it out, using the join() function
with open('output_example', 'w') as f:
f.write(''.join('%*s' % i for i in zip(width, output)))
会写出:
' a b c d e'
如您所见,格式数组width
的长度由输出的长度len(a)
决定。这足够灵活,您可以动态生成它。
希望这有帮助!