Проверьте, находится ли строка в CSV

Я хочу искать файл CSV и печатать либо True, либо False, в зависимости от того, нашел ли я строку. Тем не менее, я столкнулся с проблемой, при которой он вернет ложный положительный результат, если найдет строку, встроенную в большую строку текста. Например: он вернет True, если строка foo, а термин foobar находится в файле CSV. Мне нужно иметь возможность возвращать точные соответствия.

username = input()

if username in open('Users.csv').read():
    print("True")
else:
    print("False")

Я рассмотрел использование функций модуля mmap, re и csv, но у меня их не было.

EDIT: Вот альтернативный метод:

import re
import csv

username = input()

with open('Users.csv', 'rt') as f:
     reader = csv.reader(f)
     for row in reader:
          re.search(r'\bNOTSUREHERE\b', username)

Ответ 1

когда вы просматриваете файл csv с помощью модуля csv, он возвращает каждую строку в виде списка столбцов. Поэтому, если вы хотите найти свою строку, вы должны изменить свой код как таковой:

import csv

username = input()

with open('Users.csv', 'rt') as f:
     reader = csv.reader(f, delimiter=',') # good point by @paco
     for row in reader:
          for field in row:
              if field == username:
                  print "is in file"

но поскольку это файл csv, вы можете ожидать, что имя пользователя будет в данном столбце:

with open('Users.csv', 'rt') as f:
     reader = csv.reader(f, delimiter=',')
     for row in reader:
          if username == row[2]: # if the username shall be on column 3 (-> index 2)
              print "is in file"

Ответ 2

Вы должны посмотреть на модуль csv в python.

is_in_file = False
with open('my_file.csv', 'rb') as csvfile:
    my_content = csv.reader(csvfile, delimiter=',')
    for row in my_content:
        if username in row:
            is_in_file = True
print is_in_file

Предполагается, что ваш разделитель является запятой (замените его разделителем. Обратите внимание, что имя пользователя должно быть определено ранее. Также измените имя файла. Код проходит через все строки в файле CSV. row список строк, содержащих каждый элемент вашей строки. Например, если у вас есть это в вашем CSV файле: Joe,Peter,Michel строка будет ['Joe', 'Peter', 'Michel']. Затем вы можете проверить, находится ли ваше имя пользователя в этом списке.

Ответ 3

import csv
scoresList=[]
with open ("playerScores_v2.txt") as csvfile:
           scores=csv.reader(csvfile, delimiter= ",")
           for row in scores:
              scoresList.append(row)


playername=input("Enter the player name you would like the score for:")
print("{0:40} {1:10} {2:10}".format("Name","Level","Score"))

for i in range(0,len(scoresList)):
   print("{0:40} {1:10} {2:10}".format(scoresList[i] [0],scoresList[i] [1], scoresList[i] [2]))