继续 运行 Python 代码,但 CSV 单元格的值为空
Continue to run the Python code however the value of CSV cell is null
我有一个 csv 文件作为示例,格式如下,如您所见,可以有一条消息或两条消息,
Sara,27,Message1,Message2
Joe,21,Message3
我的 reader 如下所示,Sara 有 2 条消息,但对于 Joe 有 1 条消息,代码不会是 运行。你介意看看并帮助我吗?
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
您是否尝试过将 CSV 读入 Pandas DataFrame,然后从那里进一步处理数据?
import pandas as pd
df = pd.read_csv(f)
for index,element in df:
print(element)
element 将打印 CSV 中的所有可用列。然后,您可以使用另一个 for 循环来引用每个元素并进一步执行 processing/manipulation
在我看来,您在错误的地方处理错误。由于 except
在 for
循环之外,错误将被处理但 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
但这很容易调整。
你可以使用 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()
我有一个 csv 文件作为示例,格式如下,如您所见,可以有一条消息或两条消息,
Sara,27,Message1,Message2
Joe,21,Message3
我的 reader 如下所示,Sara 有 2 条消息,但对于 Joe 有 1 条消息,代码不会是 运行。你介意看看并帮助我吗?
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
您是否尝试过将 CSV 读入 Pandas DataFrame,然后从那里进一步处理数据?
import pandas as pd
df = pd.read_csv(f)
for index,element in df:
print(element)
element 将打印 CSV 中的所有可用列。然后,您可以使用另一个 for 循环来引用每个元素并进一步执行 processing/manipulation
在我看来,您在错误的地方处理错误。由于 except
在 for
循环之外,错误将被处理但 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
但这很容易调整。
你可以使用 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()