Skip to main content
 首页 » 编程设计

python之如何在运行时在 python 中创建文件句柄

2025年05月04日16lonelyxmas

我想把一个文件分成5个文件,第一行存入part1,第二行存入part2

是这样的

#1 #6  ... to part1 
#2 #7  ... to part2 
#3 #8  ... to part3 
#4 #9  ... to part4 
#5 #10 ... to part5 

我需要为 file1 到 file5 创建五个文件句柄,但似乎我不能使用 (part+i) 作为文件句柄,我不知道我应该转换哪种类型到 ?字符串?

如何解决?谢谢

这是我的代码

sys.argv[1] is source file   
sys.argv[2] is the directory to store   
sys.argv[3] is the number of subfile 
 
import os 
import sys 
 
for i in range(1,sys.argv[3]+1): 
    (part+i) = open(os.path.join(sys.argv[2],"part"+i),"w") 
 
source = open(sys.argv[1],"r") 
for idx,line in enumerate(source.readlines(),1): 
    position = idx % int(sys.argv[3]) 
    if position == 0: 
        (part+sys.argv[3]).write(line) 
    else: 
        (part+idx).write(line) 
 
for i in range(1,sys.argv[3]+1): 
    (part+i).close() 
source.close() 

请您参考如下方法:

您的问题与文件句柄无关,也与尝试动态创建变量无关。

答案是:不要那样做。 Keep your data out of your variable names .

改用字典或列表;下面的列表理解创建了一个打开的文件对象列表:

files = [open(os.path.join(sys.argv[2], "part{}".format(i + 1)), "w") 
         for i in range(sys.argv[3])] 

现在您可以寻址 files[0]、files[1] 更好的是,遍历此列表以访问所有打开的文件对象 files[- 1] 让您轻松访问最后一个文件对象等。

您的循环现在看起来也简单多了,因为现在您可以使用基于 0 的索引:

for idx, line in enumerate(source.readlines()): 
    position = idx % int(sys.argv[3]) 
    files[position].write(line)