我的主要问题是:
我有一组文件,我在python中以这种方式连接它们:
sys.stdout=open("out.dat","w")
filenames = ['bla.txt', 'bla.txt', 'bla.txt']
with open('out.dat', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
outfile.write(infile.read())
with open('out.dat') as f:
print "".join(line.strip() for line in f)
sys.stdout.close()
bla.txt文件看起来像
AAA
目的是让它看起来像
aaaaaaaaa
(相同字符串的3倍,每次都不在新行上......)
由于某些原因,我所做的事情会产生一个看起来像
的输出AAAAAA
一
我不确定为什么会这样,如果有更简单/更优雅的解决方案。
更多的第二个问题是,最终,我的计划是拥有许多不同的文件(例如字母三元组),我可以在所有可能的组合中连接:aaabbbccc,aaacccbbb,...等等
任何指导赞赏!谢谢!
答案 0 :(得分:2)
您的代码有一些令人困惑的事情,我会在各自的地方留下一些评论:
.value
我能想到的最简约的方法:
HTMLInputElement
至于您的错误,不应该发生错误,您是否确认# Not sure what is reason for this
sys.stdout=open("out.dat","w")
filenames = ['bla.txt', 'bla.txt', 'bla.txt']
# This does what you need
with open('out.dat', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
outfile.write(infile.read())
# Here, you open `out.dat` and rewrites it content back into it -
# because you made `sys.stdout = open("out.dat", "w")` above.
# All these lines could be removed (along with `sys.stdout` assignment above)
with open('out.dat') as f:
print "".join(line.strip() for line in f)
sys.stdout.close()
的内容正好是# Open output
with open('out.dat', 'w') as outfile:
# Iterate over each input
for infilename in ['bla.txt'] * 3:
# Open each input and write it to output
with open(infilename) as infile:
outfile.write(infile.read())
?
答案 1 :(得分:1)
Nihey Takizawa的帖子几乎回答了为什么你有这个错误。首先,让我们看看程序执行的每一步发生了什么。
sys.stdout=open("out.dat","w")
这非常重要。因为用文件处理程序将stdout替换为“out.dat”,所以使用它的每个内部函数或语句将从现在开始写入“out.dat”。
with open('out.dat', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
outfile.write(infile.read())
在此块之后,文件“out.dat”的内容为:
aaa
aaa
aaa
...或换句话说:aaa\naaa\naaa\n
其中\n
代表换行的单个字符。字符数:12(9次a
次和3次换行\n
)。
with open('out.dat') as f:
print "".join(line.strip() for line in f)
这是重要的事情。请记住,因为在步骤1中,您已将sys.stdout更改为“out.dat”,内部函数print
将输出写入“out.dat”。
您删除每一行并加入它们,因此您将“aaaaaaaaa”写入“out.dat”。
1 2 3 4 5 6 7 8 9 10 11 12
a a a \n a a a \n a a a \n # this is content of the file before print
a a a a a a a a a \n # that you write, 9 a chars + \n
# which is added by print function by default
请注意,您已经替换了12个字符中的10个并关闭了文件,因此11和12个字符将保持不变。结果是你的输出。
解决方案? 从不搞乱像更改sys.stdout文件处理程序之类的东西,除非你知道你在做什么。
编辑:如何修复代码。 我认为Nihey Takizawa很好地解释了如何修复你的代码,但实际上并不完全正确。这是解决方案:
filenames = ['bla.txt', 'bla.txt', 'bla.txt']
with open('out.dat', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
outfile.write(infile.read().strip())
现在,您的out.dat
文件只包含aaaaaaaaa
字符串,没有换行符。