#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)
afterfor 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()