Python 将csv文件复制到dict列表时,列表索引超出范围
我试图将csv文件中的数据复制到dict列表中,但在执行指向行pb_data[counter][“插曲”]的命令时,收到“列表索引超出范围”错误消息。追加(插曲)。我用print检查变量,计数器正确设置为0 这是我的密码:Python 将csv文件复制到dict列表时,列表索引超出范围,python,csv,Python,Csv,我试图将csv文件中的数据复制到dict列表中,但在执行指向行pb_data[counter][“插曲”]的命令时,收到“列表索引超出范围”错误消息。追加(插曲)。我用print检查变量,计数器正确设置为0 这是我的密码: import csv from datetime import datetime pb_data = [ { "episode": [], "title": [], "
import csv
from datetime import datetime
pb_data = [
{
"episode": [],
"title": [],
"pubdate": []
}
]
with open("downloads_stats.csv", "r") as f:
counter = csv.reader(f, delimiter = "\n")
data = list(counter)
episodes = len(data) - 1
with open("downloads_stats.csv", "r") as f:
reader = csv.DictReader(f)
counter = 0
for row in reader:
pb_data[counter]["episode"].append(episodes)
pb_data[counter]["title"].append(row["Episode"])
pb_data[counter]["pubdate"].append(datetime.strptime(row['Release Date'], '%Y-%m-%d').strftime("%d-%m-%Y"))
episodes -= 1
counter += 1
我缺少什么?在您的代码中,
pb_data
是一个包含一个字典的列表,因此当计数器大于零(列表中第一个元素的索引)时,您会得到一个索引器
相反,您需要从一个空列表开始,并为csv中的每一行追加一个新字典,如下所示:
import csv
import datetime as dt
# Example csv data
data = """\
Episode,Release Date
Ep1,2021-01-01
Ep2,2021-01-08
Ep3,2021-01-15
"""
pb_data = []
with open("downloads_stats.csv", "r", encoding='utf-8-sig') as f:
reader = csv.reader(f)
# Skip headers
next(reader)
rows = list(reader)
episodes = len(rows)
for episode, date in rows:
data = {}
episodes -= 1
data['episode'] = episodes
data['title'] = episode
data['pubdate'] = dt.datetime.strptime(date, '%Y-%m-%d').strftime('%d-%m-%Y')
pb_data.append(data)
print(pb_data)
输出
[{'Spidence':2,'标题':'Ep1','pubdate':'01-01-2021'},{'Spidence':1,'标题':'Ep2','pubdate':'08-01-2021'},{'Spidence':0,'标题':'Ep3','pubdate':'15-01-2021'}]
用于打开的encoding='utf-8-sig'
关键字参数会对文件进行解码,使其不会以“ï”?开头,这是一个字节顺序标记,表示该文件是用Microsoft版本的utf-8文本编码编码的。如果要将读取的csv转换为dict列表,可以通过pandas DataFrame.to_dict函数进行转换。这是一个两行代码..:data=pd.read\u csv(文件路径);非常感谢,我今天学到了一些新东西!