我有一些定期多行格式的数据,例如每条记录 3 行,如 r_in
:
name1
34
981
name2
12
321
name3
331
1299
...
我想使用 python 与数据混合,并使用 TAB 分隔值写入新的输出文件 r_out
,这里只有两列(名称和两个变量之间的比率)。
我制作了一个原始框架解析器来处理输入文件并使用 str.format() 给出输出。但我可能不完全理解这个函数,因为输出有些交错。还是与我使用迭代器的 next()
def parser(r_in, r_out):
with open(r_in, "r") as r_in, open(r_out, "w") as r_out:
try:
while True:
#Grab the three lines with next()
name, dat1, dat2 = next(r_in), next(r_in), next(r_in)
#Mingle around with data, say the ratio between dat1 and dat2
res = round(int(dat1)/int(dat2), 2)
#Write to r_out
r_out.write("{}\t{}".format(name, res))
except:
pass
输出看起来像:
name1
0.03name2
0.04name3
0.25me@chrx:~/projects/test$
(是的,我对 Python 还很陌生)
最佳答案
当您在文件迭代器上调用 next
时,您会得到带有终止字符的行。
虽然 int
将其剥离,但(幸运的是)字符串的情况并非如此。
因此您可以通过执行以下操作来修复它:
name, dat1, dat2 = next(r_in).rstrip(), next(r_in), next(r_in)
您还忘记了行尾的终止符。因此,一站式修复:
r_out.write("{}\t{}\n".format(name.rstrip(), res))
(如果在读取name
时已经完成,则无需再次rstrip
,如果在其他地方使用name
,则更符合逻辑,没有人需要首先在 name
中换行)
关于python-3.x - 在Python中,在迭代器中写入文件时控制字符串格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43189477/