在Python中将循环变量写入文件的单行

时间:2014-07-11 21:55:28

标签: python

假设我有一个列表X,其内容属于文件的一行,即

for var in X:
   if var <some conditions>:
         outfile.write("   "+var)

如何执行此操作以使循环的每次迭代都不会写入输出文件中的新行,即

var1  var2  var3

而不是

var1
var2
var3
outfile中的

。我知道这可以用print x作为print x来完成,我找不到写入的等价物。

2 个答案:

答案 0 :(得分:4)

除非您的vars已包含尾随换行符,否则您的文件中不会有多行。

但是,您可以使用rstrip()简单地删除任何尾随空格:

outfile.write("   " + var.rstrip())

更好的解决方案是创建包含项目的列表并join()。或者只是将生成器表达式传递给join()调用:

outfile.write('   '.join(var for var in x if condition(var)))

更明确的版本是:

results = []
for var in x:
    if condition(var):
        results.append(var)
outfile.write('   '.join(results))

答案 1 :(得分:0)

作为ThiefMaster的优秀答案的替代方案,Python3中的print函数允许您指定文件对象和结尾。

vars = ['one','two','three']

with open("path/to/outfile","w") as outfile:
    for i, entry in enumerate(vars):
        if not condition(var):
            continue
        if i == len(vars):
            _end = ''
        else:
            _end = '    '
        print(entry, end=_end, file=outfile)

然而,使用str.join可能更容易。

vars = ['one','two','three']
with open("path/to/outfile","w") as outfile:
    output_string = '    '.join(map(str.strip, [var for var in vars if condition(var)]))
    print(output_string, end='', file=outfile)
    # or outfile.write(output_string)