如何将itertools.izip逐行写入txt文件?

How to write itertools.izip to txt file one by line?

我的代码

import itertools
import os

with open("base.txt") as fv, open("new2.txt", 'r') as fi, open('sortedf.txt','w') as fs:
    vel = (line.strip() for line in fv)
    ind = (int(line.strip()) for line in fi)
    z = itertools.izip(ind, vel) # sort according to ind
    # itertools.izip(vel, ind) # sort according to vel
    for i, v in sorted(z):
        fs.write(str(v))

我在一条线上搞定了一切

2.900000e+032.900000e+032.900000e+032.900000e+032.

当我改成 fs.write('\n'.join(str(v)))

然后我得到了

2
.
9
0
0
0
0
0
e
+
0
32
.
9
0
0
0
0
0
e
+
0
32
.

如何得到正确的逐行值输出?

请尝试以下操作

fs.writelines(map(lambda x: x[1], sorted(z)))

为什么下面的语句失败了

fs.write('\n'.join(str(v)))

这里 v, 被转换成一个列表,并在其上应用连接。为了清楚起见,请看下面的示例

>>> sam = 'hello'
>>> '-'.join(sam)
'h-e-l-l-o'

那么如何使用fs.write?

  1. 写成:fs.write(v)
  2. 现在添加换行符:fs.write('\n')

几点建议:

import os # load important modules first

from itertools import izip # makes processing faster, if you only need izip 


with open("base.txt") as fv, open("new2.txt", 'r') as fi, open('sortedf.txt','w') as fs:
    vel = [line.strip() for line in fv] # use square braces
    ind = int(line.strip()) for line in fi] # use square braces
    z = izip(ind, vel) # sort according to ind
    for i, v in sorted(z):
        fs.write(v)
        fs.write('\n') # adding line break

只是改变

for i, v in sorted(z):
    fs.write(str(v))

for i,v in sorted(z):
    print(v, file=fs)
    由于 print

    end="\n" 默认参数,自动添加
  • \n

  • 适用于任何数据类型。不需要 str(v)