将print语句写入文本文件

Jef*_*eff 1 python glob text-files

我试图用*.txt打印所有文件到文本文件,文件夹看起来像这样

\ folder file1.txt file2.txt file3.csv

我的python代码如下所示:

import glob
for text in glob.glob('*.txt'):
    print text

file=open('output.txt', 'w')
file.write(text)
file.close()
Run Code Online (Sandbox Code Playgroud)

运行之后,我进入空闲窗口file1.txt file2.txt,但我的output.txt只写入了file2.txt.

我认为这将是一种获得结果的快捷方式,有没有办法可以将"文本"强制转换为输出文件?

Dou*_*gal 6

实际上,您将整个值text放在输出文件中; text只是不是你的想法.

唯一text被分配的地方是for text in glob.glob('*.txt')循环.在循环之后,它将保持为分配给它的最后一个值,即'file2.txt'.

有几种方法可以实现您想要做的事情.如果您是从命令行而不是从IDLE运行脚本,那么您可以执行类似的操作(在Unix中)

python my_script.py | tee output.txt
Run Code Online (Sandbox Code Playgroud)

将所有输出从脚本复制到文件,output.txt而不必在Python代码中执行任何操作,而不是正常print的.

您也可以直接将其写出来,而不是print按照Lattyware的建议进行调用,但除非您手动执行这两项操作,否则不会同时执行此操作.

为了使它更容易一些,你可以编写一个函数来调用而不是print更方便.就像是:

with open('output.txt', 'w') as f:
    def my_print(str):
        print str
        f.write(str + '\n')

    for filename in glob.glob('*.txt'):
        my_print(filename)
Run Code Online (Sandbox Code Playgroud)

如果你真的想要使用print语句sys.stdout,你也可以做一些有点发烧友的事:重新分配,从Python完成所有打印的特殊对象.这可能比你需要的更复杂,但如果你想看到它,我会告诉你.