关闭的csv文件

时间:2015-10-13 11:20:36

标签: python csv io

我在.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()

这应该是:

  • 代码匹配

  • 代码不匹配

2 个答案:

答案 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属性。