在CSV文件中找不到变量

时间:2015-07-15 20:17:15

标签: python csv

所以我在这里寻找名字" Steve"在我的csv文件中。但它无法找到它? (它打印"未找到"指示它运行else语句的shell)

这是我的CSV文件:

Dave    55
Steve   3
Max     56

这是我的python文件:

import csv
name = "Steve"
score = "5"
classname = "Class A"

if classname == "Class A":
    f = open('Class A.csv', 'r')
    csvread = csv.reader(f)
    for row in csvread:
        if row[0] == name:
            with open('Class A.csv', 'a', newline='') as fp:
                print("FOUND")
        else:
            with open('Class A.csv', 'a', newline='') as fp:
                print("NOT FOUND")

(我的代码超出了这个范围,但这是问题所在,所以我将为您节省整个程序)

3 个答案:

答案 0 :(得分:1)

您的文件似乎没有正确格式化为CSV格式。

您可以看到的最常见的CSV格式是逗号(可以是分号,也可以是引号,具体取决于国际化):

Dave,55
Steve,3
Max,56

读取此CSV的代码确实如下:

import csv
f = open('comma_separated.csv', 'r')
csvread = csv.reader(f)
for row in csvread:
    if row[0] == "Steve":
        print("FOUND")
    else:
        print("NOT FOUND")

在你的“csv”中我看不到分隔符。它看起来像固定宽度格式(意味着它不是CSV文件),这意味着每列的值将始终占用相同的空间。然后,您只需选择数据所在的列即可拆分数据。另一种方法是使用正则表达式。

f = open('fixed_width.txt', 'r')
for row in f:
    if row[0:5].strip() == "Steve":
        print("FOUND")
    else:
        print("NOT FOUND")

正如其他建议的那样,如果字段确实用制表符分隔,那么文件应该是这样的(如果你在文本编辑器中复制粘贴,你将有更好的机会看到值之间的制表符号):

Dave    55
Steve   3
Max 56

相应的代码将为您提供表格所需的答案:

import csv
f = open('tab_separated.tsv', 'r')
csvread = csv.reader(f, delimiter='\t')
for row in csvread:
    if row[0] == "Steve":
        print("FOUND")
    else:
        print("NOT FOUND")

另请注意,在我的示例中,我在附加模式中删除了文件的open(),因为我没有看到这样做的用例,而且它没有回答你的问题。

答案 1 :(得分:0)

您的预期结果仍然有点模糊,但您肯定要将print("FOUND")更改为fp.write("whatever the output is")

您打开文件并同时附加文件的方式可能很危险,不建议使用。写一个新文件以防止出现问题总是更好。

如果您想要Steve写入新文件,那么只需row[0],如果您想要写Steve 3,那么您需要拆分列表写作前("Steve", 3)write()只允许使用字符串,而不是列表或元组。

如果这澄清了事情,请告诉我。

答案 2 :(得分:0)

由于您的文件似乎用空格而不是字符分隔符分隔,因此您无法使用csv.reader来解析它。

而不是

csvread = csv.reader(f)
for row in csvread:

试试这个

for line in f:
    row = line.split()

这应该给出你想要的结果。