在 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= 中换行] 首先)