下面是 csv 文件的片段。第一列是产品编号,2 是库存水平,3 是目标水平,4 是距目标的距离(目标减去库存水平)。
34512340,0,95,95
12395675,3,95,92
56756777,70,95,25
90673412,2,95,93
当库存水平达到 5 或以下时,我希望在用户请求时从 python 更新库存水平。
我目前正在使用这段代码,它是我根据更新 CSV 中的一行进行改编的。但它不起作用。第一行作为 34512340,0,95,95
写回文件,文件的其余部分被删除。
choice = input("\nTo update the stock levels of the above products, type 1. To cancel, enter anything else.")
if choice == '1':
with open('stockcontrol.csv',newline='') as f:
for line in f:
data = line.split(",")
productcode = int(data[0])
target = int(data[2])
stocklevel = int(data[1])
if stocklevel <= 5:
target = str(target)
import sys
import csv
data=[]
newval= target
newtlevel = "0"
f=open("stockcontrol.csv")
reader=csv.DictReader(f,fieldnames=['code','level', 'target', 'distancefromtarget'])
for line in reader:
line['level']= newval
line['distancefromtarget']= newtlevel
data.append('%s,%s,%s,%s'%(line['code'],line['level'],line['target'],line['distancefromtarget']))
f.close()
f=open("stockcontrol.csv","w")
f.write("\n".join(data))
f.close()
print("The stock levels were updated successfully")
else:
print("Goodbye")
这是我在 CSV 文件中更改一行的代码并且有效:
with open('stockcontrol.csv',newline='') as f:
for line in f:
if code in line:
data = line.split(",")
target = (data[2])
newlevel = stocklevel - quantity
updatetarget = int(target) - int(newlevel)
stocklevel = str(stocklevel)
newlevel = str(newlevel)
updatetarget = str(updatetarget)
import sys
import csv
data=[]
code = code
newval= newlevel
newtlevel = updatetarget
f=open("stockcontrol.csv")
reader=csv.DictReader(f,fieldnames=['code','level', 'target', 'distancefromtarget'])
for line in reader:
if line['code'] == code:
line['level']= newval
line['distancefromtarget']= newtlevel
data.append('%s,%s,%s,%s'%(line['code'],line['level'],line['target'],line['distancefromtarget']))
f.close()
f=open("stockcontrol.csv","w")
f.write("\n".join(data))
f.close()
我可以更改什么以使代码正常工作?我基本上希望程序循环遍历 CSV 文件的每一行,如果库存水平(第 2 列)等于或小于 5,则将库存水平更新为第 3 列中的目标数字,然后在第 4 列为零。
谢谢
最佳答案
下面的代码读取每一行并检查第2列的值。如果它小于或等于5,则将第2列的值更改为第3列的值,并将最后一列更改为0,否则保留所有列不变。
import sys
import csv
data=[]
f=open("stockcontrol.csv")
reader=csv.DictReader(f,fieldnames=['code','level','target','distancefromtarget'])
for line in reader:
if int(line['level']) <= 5:
line['level']= line['target']
line['distancefromtarget']= 0
data.append("%s,%s,%s,%s"%(line['code'],line['level'],line['target'],line['distancefromtarget']))
f.close()
f=open("stockcontrol.csv","w")
f.write("\n".join(data))
f.close()
遇到代码中的问题:
您首先在不使用 csv
模块的情况下读取文件,并通过拆分行来获取每列中的值。您再次使用 csv
模块的 DictReader
方法来读取已有的值。
关于python - CSV 中多行的字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729969/