所以我在这里寻找名字" 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")
(我的代码超出了这个范围,但这是问题所在,所以我将为您节省整个程序)
答案 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()
这应该给出你想要的结果。