我有一个由行分隔的代理列表。这些代理需要分成单独的列表,其中包含我选择的大小。
所以我希望程序输入10,25和50个需要拆分的列表,然后将新列表作为文本文件输出。相同的代理不能出现在两个单独的列表中。
到目前为止,我只是简单地计算代理
filename = input('Enter a file name: ')
with open(filename) as f:
line_count = 0
for line in f:
line_count += 1
print("Number of proxies: " + str(line_count))
有关如何进行的任何提示?
答案 0 :(得分:1)
你可以通过以下方式实现这一目标:
def split_list(filename, size)
new_content = []
with open(filename) as f:
content = f.readlines()
for chunk in range(0, len(content), size):
new_content.append(content[chunk:chunk+size])
代码将生成从0到文件长度的数字(范围)。使用范围的步参数,我们可以在每次迭代时通过 size 增加起点。
代码将遍历列表,并使用切片从构造新列表的列表中获取元素块。这些新列表将是新列表的元素, new_content 。
答案 1 :(得分:0)
对于可变尺寸,请尝试:
def split_list(filename, sizes):
with open(filename) as f:
content = f.readlines()
new_content = []
start = 0
for size in sizes:
stop = start + size
new_content.append(content[start:stop])
start += size
return new_content
splitted_list = split_list('data.txt', [5, 2, 3])
for i, l in enumerate(splitted_list):
with open('{}.txt'.format(i), 'w') as f:
f.writelines(l)
鉴于data.txt
是
1
2
3
4
5
6
7
8
9
10
它将生成三个文件(在split_list
函数的第二个参数中指定):
0.txt
行(第一个指定的块)的 5
:
1
2
3
4
5
带有以下1.txt
行(第二个块)的 2
:
6
7
最后2.txt
包含最后3
行(第三个块):
8
9
10