Ошибка типа: неподдерживаемые типы операндов для +: 'int' и 'list' при попытке разбить текстовый файл - PullRequest
0 голосов
/ 25 апреля 2018

Программа предназначена для загрузки текстового файла с одним прокси в каждой строке. Затем он просит пользователя ввести разделение, в котором ему нужны прокси. Например, если бы у меня было 100 прокси в текстовом файле на 100 отдельных строк, и я сказал, что мне нужно пять 10 пакетов прокси и два 25 пакета прокси, программа выдаст в общей сложности семь текстовых файлов, которые в сумме составят всего из 100 прокси.

filename = input('Enter a file name: ') 
    with open(filename) as f: ###load text file
        line_count = 0
        for line in f:
            line_count += 1 
    print("Number of proxies: " + str(line_count)) ###count proxies

pack10 = int(input("10 packs? ")) ###designate packs
pack25 = int(input("25 packs? "))
pack50 = int(input("50 packs? "))
pack100 = int(input("100 packs? "))
total = pack10*10 + pack25*25 + pack50*50 + pack100*100 ###calculate total proxies needed
packs = ([pack10]*10) + ([pack25]*25) + ([pack50]*50) + ([pack100]*100)

def split_list(filename, sizes): ###chunking of list
    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(filename, [packs])


if line_count < total:
    print("You need " + str((total - line_count)) + " more proxies") ###ensure right amount of proxies
else:
    for i, l in enumerate(splitted_list): ###chunk proxies
        with open('{}.txt'.format(i), 'w') as f:
            f.writelines(l) #output text files
            print("Complete")

Это ошибка:

Traceback (most recent call last):
  File "c:\Users\Username\Desktop\New Folder\proxies\splitter.py", line 28, in <module>
    splitted_list = split_list(filename, [packs])
  File "c:\Users\Username\Desktop\New Folder\proxies\splitter.py", line 22, in split_list
    stop = start + size
TypeError: unsupported operand type(s) for +: 'int' and 'list'

Не уверен, что делать, программа прекрасно работает, когда я заменяю [packs] в splitted_list = split_list(filename, [packs]) на [5, 3, 2], например.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Это потому, что packs - это двумерный список, когда вы передаете его в split_list.

Когда вы определяете packs, добавляя [pack10] * 10 вверх и так далее, Python берет на себя вольностии создание группы новых списков с переменными пакета, просто появляющимися числом раз, на которое вы умножаетесь.
enter image description here

Когда вы добавляете эти списки вместе, это делаетопять то же самое, создав один большой одномерный список.enter image description here

Затем, когда вы передаете packs в split_list, вы используете квадратные скобки, превращая packs в двумерный массив.
enter image description here

0 голосов
/ 25 апреля 2018

Снять квадратные скобки из этой строки:

splitted_list = split_list(filename, [packs])

так становится:

splitted_list = split_list(filename, packs)

Вместо того, чтобы передавать массив размеров, вы оборачиваете свой массив в дополнительный слой массива, поэтому первый элемент размеров - это то, что вам нужно. например. Вместо ввода [2, 2, 2, 5, 5, 5] вы передаете [[2, 2, 2, 5, 5, 5]].

...