假设我有一个列表X,其内容属于文件的一行,即
for var in X:
if var <some conditions>:
outfile.write(" "+var)
如何执行此操作以使循环的每次迭代都不会写入输出文件中的新行,即
var1 var2 var3
而不是
var1
var2
var3
outfile中的。我知道这可以用print x作为print x来完成,我找不到写入的等价物。
答案 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)