Как решить индекс списка вне диапазона в Python? - PullRequest
0 голосов
/ 26 мая 2020
• 1000 CSV-файл. Ниже приведен снимок экрана CSV-файла.

enter image description here

enter image description here

Ниже приведены мои код:

from datetime import date,datetime
import numpy as np
import xlrd
import codecs
import time
import re
import os
import jieba
from itertools import repeat
import sys
import csv
maxInt = sys.maxsize

while True:
    # decrease the maxInt value by factor 10 
    # as long as the OverflowError occurs.

    try:
        csv.field_size_limit(maxInt)
        break
    except OverflowError:
        maxInt = int(maxInt/10)

sys.setrecursionlimit(100000000)


jieba.load_userdict('./data/dict.txt')

file_name = 'Real/B_Seg_output.csv'

with open (file_name, 'r', encoding="utf-8") as csvfile:
    reader = csv.reader(csvfile)
    column = [row[0] for row in reader]
    author_list = list(column)

#print(author_list)
print('-'*30)

with open('Real/Other_Content_Count_All.csv', 'a', newline='', encoding='utf-8') as csvfile:
    csvfile.write('回復內容\n')

j=0
cnt = set(author_list)
for i in cnt:
    j += 1
    print(j)
    if(j % 10000 == 0):
        print('*'*10+str(j)+" is sleeping"+'*'*10)
        time.sleep(10)

    if author_list.count(i)>0:
        #print(i+',',author_list.count(i))
        #print(i)
        #print(author_list.count(i))
        with open('Real/First_Author_Count_All.csv', 'a', newline='', encoding='utf-8') as csvfile:
            csvfile.write(i+','+str(author_list.count(i))+'\n')

Когда я запустил этот код, у меня возникла следующая проблема:

Traceback (most recent call last):
  File ".\count_All_Other_Content.py", line 38, in <module>
    column = [row[0] for row in reader]
  File ".\count_All_Other_Content.py", line 38, in <listcomp>
    column = [row[0] for row in reader]
IndexError: list index out of range

enter image description here

Я искал связанные проблемы. Я подозревал, что причина в том, что у некоторых строк есть пробел.

Однако я не могу найти решение. И тогда я подозревал, что количество строк CSV превышает предел списка.

Мне нужно использовать этот файл CSV, чтобы подсчитать количество вхождений каждого слова. Не знаю, что решать.

Ответы [ 3 ]

0 голосов
/ 26 мая 2020
for row in reader:
    if len(row[0]) > 0:
        column = row[0]
    else:
        pass

Вы можете добавить эту строку перед author_list и после строк читателя. Так что если проверяет, есть ли там что-то, то берет это. В противном случае он переходит в другие строки.

0 голосов
/ 03 июня 2020

Я думаю, что самый быстрый способ сделать это - просто использовать такие строки чтения:

with f as open('myfile'):
    lines = f.readlines()

Теперь строки - это список всех строк в файле, если строка пуста, у вас будет пустая строка ('') в списке, и вы можете легко это проверить. Вы также можете удалить символы '\ r' и '\ n'.

Если вы хотите подсчитать количество разных слов, вы можете просто использовать len(set(lines)). Если вы хотите подсчитать каждое из них, вы можете использовать функцию numpy .unique, которая выдаст вам массив уникальных значений, а также количество каждого из них.

0 голосов
/ 26 мая 2020

Может быть, вы можете просто изменить строку column = [row[0] for row in reader] на одну из следующих:

  • column = [row[0] if row else None for row in reader] - Это сохранит индексы, если это важно
  • column = [row[0] for row in reader if row] - Это будет пропускать пустые строки

Если заголовок пуст, при попытке доступа к каким-либо элементам возникает ошибка IndexError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...