【问题标题】:Unix cat function (cat * > merged.txt) in Python? [duplicate]Python中的Unix cat函数(cat *>merged.txt)? [复制]
【发布时间】:2013-12-13 17:34:14
【问题描述】:

一旦建立了目录,有没有办法在 Python 或类似的东西中使用来自 Unix 的 cat 函数?我想把files_1-3合并到merged.txt中

我通常会在 Unix 中找到目录然后运行

cat * > merged.txt 

file_1.txt
file_2.txt
file_3.txt

merged.txt

【问题讨论】:

标签: python unix merge concatenation cat


【解决方案1】:

使用fileinput 模块:

import fileinput
import glob
with open('/path/to/merged.txt', 'w') as f:
    for line in fileinput.input(glob.glob('/path/to/files/*')):
        f.write(line)
    fileinput.close()

【讨论】:

  • 它怎么知道它在哪个目录?
  • @draconisthe0ry 可以将目录路径传递给glob.glob
  • IIRC, fileinput 对象应该像关闭常规文件一样关闭。我认为在 for 循环之后fileinput.close() 不会受到伤害......
【解决方案2】:

据我们所知,我们将使用“Unix”cat 命令(除非您正在寻找一种 Python 方式或注重性能)

你可以使用

import os
os.system("cd mydir;cat * > merged.txt")

正如 1_CR 所指出的(谢谢)并在此处解释 Python: How to Redirect Output with Subprocess?

【讨论】:

  • 你可能有一点但是check this
  • 有很多理由不只是掏钱;其中,产生一个新进程以产生另一个新进程只是为了读取文件并将它们写出的开销;其次:安全性,如果您使用用户输入来确定读取或写入的位置。此外,脱壳增加了一系列问题,例如确保 cwd 正确、$PATH 等,并且是不可移植的。
  • 有效积分。但是,:) 在 OP 提出的问题的上下文中-“有没有办法在 Python 中使用来自 Unix 的 cat 函数”,我猜 OP 想要执行简单的任务自动化而不是构建真正的应用程序。而且我仍然觉得这是您(说您从未使用过,我会接受您的投票:))和我使用“os.system”调用以实用的方式执行如此简单的任务的时刻之一。
【解决方案3】:

使用fileinput。假设你有一个 python 文件merge.py,代码如下,你可以这样称呼它merge.py dir/*.txt。文件merged.txt 被写入当前目录。默认情况下,fileinput 会遍历命令行传递的文件列表,因此您可以让 shell 处理通配符

#!/usr/bin/env python
import fileinput
with open('merged.txt', 'w') as f:
    for line in fileinput.input():
        f.write(line)

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2013-07-27
    • 2017-03-14
    相关资源
    最近更新 更多