继续运行Python代码,但是CSV单元格的值为null



我有一个以下格式的csv文件作为示例,正如您所看到的,它可能有一条或两条消息,

Sara,27,Message1,Message2
Joe,21,Message3

我把我的读者写如下,Sara有两条消息,它很好用,但Joe有一条消息,代码就不会运行了。你介意帮我看看吗?

reader = csv.reader(f)
try:
for row in reader:
name=row[0]
age=row[1]
MSG1=row[2]
MSG2=row[3]
#for row[2]
if MSG1=='Message1': 
print("A")
if MSG1=='Message3': 
print("B")
#for row[3]
if MSG2=='Message2': 
print("C")
except IndexError:
pass

以上代码结果:

AB

预期结果:

AB 
C

您可以使用Extended Iterable Unpacking,对于检查条件,您可以使用类似{'Message1': 'A', 'Message2': 'C', 'Message3': 'B'}的字典

with open('data.csv') as fp:
reader = csv.reader(fp)
d = {'Message1': 'A', 'Message2': 'C', 'Message3': 'B'}
for row in reader:
name, age, *messages = row
for msg in messages:
print(d[msg], end='')
print()

在我看来,您在错误的地方处理错误。由于exceptfor循环之外,将处理错误,但for循环不会继续。尝试将错误处理置于循环中:

import csv
with open('test.dat') as f:
reader = csv.reader(f)
for row in reader:
name = row[0]
age = row[1]
MSG1 = row[2]
try:
MSG2 = row[3]
except IndexError:
# Handling only row[3] and not skipping
# the row
MSG2 = "MISSING DATA"

#for row[2]
if MSG1=='Message1': 
print("A", end='')
if MSG1=='Message3': 
print("B", end='')
#for row[3]
if MSG2=='Message2': 
print("C", end='')

# Add end of line
print("")

更新1:

  • 第二个问题是第2行将不会被处理,因为它将引发异常并被跳过
  • 在此版本中,异常仅用于处理MSG2。任何其他错误都会使脚本崩溃(如文件末尾的空行或缺少行[2](

打印有点乱,它给出的输出是:

AC
B

但这很容易调整。

您是否尝试过将CSV读取到Pandas DataFrame中,然后从那里进一步处理数据?

import pandas as pd
df = pd.read_csv(f)
for index,element in df:
print(element)

元素将打印CSV中的所有可用列。然后,您可以使用另一个for循环来引用每个元素,并进行进一步的处理/操作

相关内容

  • 没有找到相关文章

最新更新