在 python 控制在迭代器中写入文件时的字符串格式
In python control the string format when writing to file in an iterator
我有一些数据通常以多行格式出现,例如每条记录 3 行,如 r_in
:
name1
34
981
name2
12
321
name3
331
1299
...
我想使用 python 与数据混在一起,并写入一个新的输出文件 r_out
用 TAB 分隔值,这里只有两列(名称和两个变量之间的比率).
我制作了一个原始框架解析器来处理输入文件并使用 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
则更符合逻辑,不需要在 [=15= 中换行] 首先)
我有一些数据通常以多行格式出现,例如每条记录 3 行,如 r_in
:
name1
34
981
name2
12
321
name3
331
1299
...
我想使用 python 与数据混在一起,并写入一个新的输出文件 r_out
用 TAB 分隔值,这里只有两列(名称和两个变量之间的比率).
我制作了一个原始框架解析器来处理输入文件并使用 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
则更符合逻辑,不需要在 [=15= 中换行] 首先)