【发布时间】:2018-07-10 11:25:27
【问题描述】:
目标是以优雅的方式将csv_line 的第二个字段替换为new_item。这个问题与 Rawing 列出的主题不同,因为我们在这里使用不同的数据结构,尽管我们可以使用其他主题来获得启发。
# Please assume that csv_line has not been imported from a file.
csv_line = 'unknown_item1,unknown_old_item2,unknown_item3'
new_item = 'unknown_new_item2'
goal = 'unknown_item1,unknown_new_item2,unknown_item3'
# Works but error prone. Non-replaced items could be inadvertently swapped.
# In addition, not convenient if string has many fields.
item1, item2, item3 = csv_line.split(',')
result = ','.join([item1, new_item, item3])
print(result) # unknown_item1,unknown_new_item2,unknown_item3
# Less error prone but ugly.
result_list = []
new_item_idx = 1
for i, item in enumerate(csv_line.split(',')):
result_list += [item] if i != new_item_idx else [new_item]
result = ','.join(result_list)
print(result) # unknown_item1,unknown_new_item2,unknown_item3
# Ideal (not-error prone) but not working.
csv_line.split(',')[1] = new_item
print(csv_line) # unknown_item1,unknown_old_item2,unknown_item3
【问题讨论】:
-
国际海事组织错误。这里我们使用不同的数据结构(字符串)并且没有 IO。
-
@MLguy 它不依赖任何东西。您可以将字符串包装在
StringIO中并在其上使用 csv 阅读器。这是处理 csv 数据的正确方法。但是如果可以的话,你应该首先避免将数据作为字符串读取。