我在.csv
文件中有一些信息。我希望能够检查文件中是否包含某些代码。
这是我的代码:
import csv
with open('bezoekerscode.csv', 'r') as f:
reader = csv.reader(f)
def code_control():
code = str(input('Type hier uw code in die u wilt controleren:\n'))
if code in reader:
print('code komt overheen, en wordt nu gecheckt of de aanbieder wel correct is.')
f.close()
else:
print('deze code komt niet overheen.')
f.close()
code_control()
这应该是:
代码匹配
或
答案 0 :(得分:1)
您的代码存在的问题是您在 code_control 函数中使用了 reader 变量,但该变量在 context 。
您可以全局声明它,也可以将其作为参数发送到code_control函数,如下所示:
import csv
def code_control(reader):
code = str(input('Type hier uw code in die u wilt controleren:\n'))
if code in reader:
print('code komt overheen, en wordt nu gecheckt of de aanbieder wel correct is.')
else:
print('deze code komt niet overheen.')
with open('bezoekerscode.csv', 'r') as f:
reader = csv.reader(f)
code_control(reader)
此外,您并不真正需要f.close(),因为您通过使用处理的上下文管理器已经处理过了。
答案 1 :(得分:1)
您可以利用Python中的空列表[]
在False
子句中被评估为if
的事实:
if [line for line in reader.readlines() if code in line.strip()]:
# if code doesn't match a line, it will return [] ergo false
# and else is going to get executed.
else:
# Do else stuff.
您通常也希望将with open
语句移动到该函数中。 with
之后会自动关闭您的文件。你的代码看起来会更好:
import csv
def code_control():
with open('bezoekerscode.csv', 'r') as f:
reader = csv.reader(f)
code = str(input('Type hier uw code in die u wilt controleren:\n'))
if [line for line in reader.readlines() if code in line.strip()]::
print('code komt overheen, en wordt nu gecheckt of de aanbieder wel correct is.')
else:
print('deze code komt niet overheen.')
code_control()
注意, 无法 对已关闭的文件执行操作。要评估文件是否仍处于打开状态,您可以检查其file.closed
属性。