2

我想将一个文件分成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()
4

2 回答 2

4

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

答案是:不要那样做。将您的数据保留在变量名之外

改用字典或列表;以下列表推导创建打开文件对象的列表:

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)
于 2013-10-14T09:46:12.363 回答
2

使用列表。

files = []
 ...
files.append(open(...))
 ...
files.append(open(...))
 ...
于 2013-10-14T09:46:33.093 回答