在Python中修改和重写.csv文件
我试图从.csv文件中读取信息,更改特定行,然后重写该文件。我的代码如下:在Python中修改和重写.csv文件,python,csv,Python,Csv,我试图从.csv文件中读取信息,更改特定行,然后重写该文件。我的代码如下: import csv forename=input("Forename:") surname=input("Surname:") percentage=("Percentage number:") file=open("file1.csv", "r") read=csv.reader(file) sort=sorted(read, key=operator.itemgetter(0)) data = [(fore
import csv
forename=input("Forename:")
surname=input("Surname:")
percentage=("Percentage number:")
file=open("file1.csv", "r")
read=csv.reader(file)
sort=sorted(read, key=operator.itemgetter(0))
data = [(forename, surname, percentage, "0", "0")]
for line in sort:
if forename == line[0] and surname == line[1]:
condition = True
if line[3] == "0":
line[3] = score
elif line [4] == "0":
line[4] = score
else:
line[4] = line[3]
line[3] = line[2]
line[2] = score
if condition == False:
sort.append(data)
file.close()
file=open("file1.csv", "w")
writer=csv.writer(file)
writer.writerows(sort)
file.close()
但是,当我尝试写入文件时,所有数据都会进入第一列,并且是列表格式([“forename”、“姓氏”、“percentage”])
即使已经有一条记录具有相同的名字和姓氏(而不是更改记录,然后重写文件),也会发生这种情况,这表明检查也不起作用
file.csv包含以下内容(用于存储最后三个百分比):
问题是什么?您想要排序。扩展(数据)而不是
append
–首先,您的过滤器不起作用,因为您实际上没有修改“sort”对象中的字段。尝试这样的循环:
for line_num in range(len(sort)):
if forename == sort[line_num][0] and surname == sort[line_num][1]:
condition = True
if sort[line_num][3] == "0":
sort[line_num][3] = percentage
elif line [4] == "0":
sort[line_num][4] = percentage
else:
sort[line_num][4] = sort[line_num][3]
sort[line_num][3] = sort[line_num][2]
sort[line_num][2] = percentage
或者:
new = []
for line in sort:
if forename == line[0] and surname == line[1]:
condition = True
if line[3] == "0":
line[3] = percentage
elif line [4] == "0":
line[4] = percentage
else:
line[4] = line[3]
line[3] = line[2]
line[2] = percentage
new.append(line)
if condition == False:
sort.append(data)
else:
sort = new
此外,我认为您可能必须将变量“data”设置为列表而不是元组:
data = [forename, surname, percentage, "0", "0"]
数据
应该是一个列表,而不是包含元组的列表
像这样,['Madeline','Naylor','30','60','60']
而不是这个,[('John','BAtman','75','0','0')]
不知道代码的每一步都在做什么可能会导致混乱的情况。我建议您修复数据
的构造方式,而不是更改将列表添加到排序
的方式
In [1597]: sort.append(data)
In [1598]: sort
Out[1598]:
[['Alice', 'Berger', ' 23', '38', '0'],
['Cara', 'Day', '80', '30', '40'],
['Eliza', 'Fyles', '60', '37', '90'],
['George', 'Hughes', '34', '0', '0'],
['Isaac', 'James', '50', '60', '85'],
['Kyle', 'Lyons', '22', '70', '35'],
['Madeliene', 'Naylor', '30', '60', '60'],
['John', 'BAtman', 75, '0', '0']]
你想要
sort.extend(data)
而不是append你能上传输入数据的样本吗?我已经添加了csv文件@fixxer的内容-希望这就是你的意思!
In [1597]: sort.append(data)
In [1598]: sort
Out[1598]:
[['Alice', 'Berger', ' 23', '38', '0'],
['Cara', 'Day', '80', '30', '40'],
['Eliza', 'Fyles', '60', '37', '90'],
['George', 'Hughes', '34', '0', '0'],
['Isaac', 'James', '50', '60', '85'],
['Kyle', 'Lyons', '22', '70', '35'],
['Madeliene', 'Naylor', '30', '60', '60'],
['John', 'BAtman', 75, '0', '0']]