Как получить доступ к значению в файле .csv в python

#python

#python

Вопрос:

Я пытаюсь получить доступ к значению в файле .csv. Если значение равно 200 или выше, я хотел бы добавить всю строку в список. Я продолжаю получать сообщение об ошибке, в котором говорится, что индекс находится вне диапазона в if(line[2] >= str(200)): строке. Любая помощь с этой ошибкой была бы весьма признательна.

 import csv
fields=[]
rows=[]
def readFile():
    with open('employee-logins.csv','r') as file:
        data=csv.reader(file)
        fields=next(data)
        for line in data:
            if(line[2] >= str(200)):
                rows.append(line)
    file.close()
readFile()
 

Вот данные для файла .csv. Если количество логинов для строки равно 200 или выше, я хотел бы добавить его в список.

 ['First;Last;Logins;IP_Address']
['Codie;Junifer;244;218.57.222.107']
['Dale;Cullingford;177;199.21.64.239']
['Dasie;Rodolf;171;45.235.38.213']
 

Комментарии:

1. Там ничего line[2] нет, попробуйте использовать print(line) after for line in data и проверьте, что у вас там есть.

2. Кроме того, str() просто возвращает аргумент в виде строки. Так что в этом случае оно вернется "200" . Я думаю, что вы хотите проверить длину строки: len(line) >= 200

3. можете ли вы также добавить данные csv в вопрос

4. Извините, я должен был быть немного более ясным в вопросе. Я хочу посмотреть, превышает ли значение данных в [2] столбце 200, а не длина.

Ответ №1:

попробуйте

 import csv
fields=[]
rows=[]
def readFile():
    with open('employee-logins.csv','r') as file:
        data=csv.reader(file)
        fields=next(data)
        for line in data:
            if(int(line.split(',')[2]) >= 200):  #assumin values are saperated using , if not replace it with ;
                rows.append(line)
    file.close()
readFile()
 

Ответ №2:

Я думаю, вы хотели бы сравнить целые числа, т. е. int(line[2]) >= 200 .

 import csv

lines = [
    'First;Last;Logins;IP_Address',
    'Codie;Junifer;244;218.57.222.107',
    'Dale;Cullingford;177;199.21.64.239',
    'Dasie;Rodolf;171;45.235.38.213',
]

with open('employee-logins.csv', 'w') as file:
    for line in lines:
        file.write(line   'n')

fields = []
rows = []


def readFile():
    with open('employee-logins.csv', 'r') as file:
        data = csv.reader(file, delimiter=';')
        fields[:] = next(data)
        for line in data:
            if (int(line[2]) >= 200):
                rows.append(line)


readFile()

print(fields)
print(rows)
 

Ответ №3:

Почему бы не использовать фреймы данных pandas :

 import pandas as pd

# Read the csv into a DataFrame with a header :
df = pd.read_csv('employee-logins.csv')

# Filter only the rows with Logins>=200 ans save them into a new DataFrame: 
df_filtered = df[df.Logins>=200] 

# Transform back into string and then into list : 
final_list = df_filtered.astype("str").apply(lambda row: row.str.join(';'), axis=1).values.tolist()