python 用于循环打印文件内容的脚本

python script for loop to print contents of files

我需要制作一个 Python 脚本来创建一个 FASTA 文件,其中包含来自 /resources/pvalb/ 的所有 .fa 文件的所有记录。该脚本应该能够获取文件列表并输出所有文件的内容(本质上模仿 bash 中的 cat 命令)

这里是我目前的例子:

> import sys
> 
> filenames = sys.argv[1:]
> 
> for filename in filenames:
>     for line in open(filename):
>         line = line.rstrip("\n")
>         print(line)

以下是您的脚本需要考虑的一些事项:

  • 文件可能包含二进制数据或无法识别的文本编码
  • 文件可能很大
    • 它们甚至可能比您系统上的可用内存还大
    • 甚至有可能一条“线”比您系统上的内存还大

要解决这些问题,最好用'b'以二进制模式打开文件,然后分块读取。

这是一个示例,每个块最多 4 KiB:

import sys

for path in sys.argv[1:]:
    with open(path, 'rb') as file:
        while data := file.read(4096):
            sys.stdout.buffer.write(data)

更多提示:

  • 大多数文件系统、大多数 SSD 和较新的 HDD 都以 4 KiB 块存储数据,因此以 4 KiB 块读取和写入通常是一种非常有效的方式
  • 对于非常大的文件,尤其是像 Python 这样的“慢”语言,您可以通过将这些块增加到 1 MiB 甚至 10 MiB 来获得更快的性能
  • 1 MiB 和 10 MiB 块在大型分布式文件系统(如 Lustre 和 BeeGFS)中很常见,尽管这些文件系统可以具有多种块大小。