将行分隔列表拆分为多个较小的列表

时间:2018-04-22 06:05:06

标签: python list

我有一个由行分隔的代理列表。这些代理需要分成单独的列表,其中包含我选择的大小。

所以我希望程序输入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))

有关如何进行的任何提示?

2 个答案:

答案 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