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)中很常见,尽管这些文件系统可以具有多种块大小。
我需要制作一个 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)中很常见,尽管这些文件系统可以具有多种块大小。