请帮我写代码
我要走了
IndexError: list index out of range
当我使用
split(",")[1] and split(",")[2]
这倒可以
split(",")[0] and split(",")[-1]
谢谢你的帮助
my data like this:
INPUT.csv
col0 col1 col2 col3 col4
blue, eight, line, aaa abc@123.com,xyz@123.com,ghi@123.com
green, nine, square, bbb sdf@123.com,wef@123.com,hft@123.com
expected output
OUTPUT.csv
col0 col1 col2 col3 col4 col5 col6
blue eight line aaa abc@123.com xyz@123.com ghi@123.com
green, nine, square, bbb sdf@123.com wef@123.com hft@123.com
到目前为止我的代码是:
import csv
with open('INPUT.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file)
with open('OUTPUT.csv', 'w',encoding='utf-8') as new_file:
fieldnames = ['col0','col1','col2','col3','col4','col5','col6']
csv_writer = csv.DictWriter(new_file,lineterminator='\n' ,
fieldnames=fieldnames)
)
for row in csv_reader:
csv_writer.writerow({
"col0": row["col0"],
"col1": row["col1"],
"col4": row["col4"].split(",")[0].strip(),
"col5": row["col4"].split(",")[1].strip(),
"col6": row["col4"].split(",")[2].strip(),
})
您正在以逗号分隔的值读取文件。所以,看这一行:
用逗号分隔的值为:
所以,第4列是
wef@123.com
。当你尝试在逗号上拆分它时,它当然没有任何结果,所以你只得到一个结果,然后你要求第二个和第三个不存在的值。你知道吗你需要修正你的CSV文件实际上是一个CSV文件。你知道吗
这包括在
bbb
列之后和头中的每一列之后加一个逗号。你知道吗更重要的是,这意味着在使用相同的逗号分隔列时,不要在列中使用逗号。结果充其量是不明确的,因此无法解析。你知道吗
解决方法包括:
(您可以几乎在这里使用
", "
作为列分隔符,但这真的很麻烦,任何人编辑您的文件都会破坏它。)下面是一个可行的例子:
即使有这么多杂乱的间距(您总是从人工编辑的文件中获得),也可以用正确的dialect parameters清晰地解析:
现在,每一行看起来像这样:
…现在,你可以
row["col4"].split(",")
回来了:然后,
[1]
和[2]
将工作。你知道吗但是,代码中至少还有一个问题。您想要的输出包括第2列和第3列,但是您要显式地将它们排除在
writerow
之外。你知道吗当我们在做的时候,没有理由试图把7行代码塞进一个表达式中。那么,为什么不只
split
一次呢?你知道吗然后,我们可以修改
row
:…现在:
如果
string
不包含任何','
,那么string.split(',')
将返回一个包含单个元素的列表,即整个字符串。在这种情况下,string.split(',')[1]
将明显提高IndexError
。你知道吗li[0] == li[-1]
在case中li
是一个包含单个元素的列表。你知道吗相关问题 更多 >
编程相关推荐