python-3.x - 在Python中,在迭代器中写入文件时控制字符串格式

标签 python-3.x io iterator string-formatting

我有一些定期多行格式的数据,例如每条记录 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/

相关文章:

java - 实现这样的迭代器?

vector - 是否可以使用迭代器将向量分成 10 个一组?

Python3 脱离源代码构建

python-3.x - 美汤不解析嵌套表数据

python - 如何在给定两个协程的 python 中实现,一直运行一个直到另一个完成

C: S_ISDIR 无法正常工作,只有 "."和 ".."显示为目录

java - Iterable 和 Iterator 接口(interface)的使用

python-3.x - 自动使 Bokeh 图适合屏幕?

java - 从 InputStream 捕获的值无法在 Java 中正确显示

php - 文件大小(): giving incorrect result