我想读取一个名为Books.csv的csv文件,该文件包含多行,并在第19行之后插入新行。每行值仅限于其第一个单元格(A1至A24)。
我已经计算/迭代了一个由30行组成的名为“ c”的字符串。
import csv
variant = "VC4"
MET = "cutting.MET"
name = "Rob"
Base_ModQual = -0.8
Deg_rate = 0.30
Num_Years = 30
for i in range(Num_Years+1):
deg = (Base_ModQual + (i)*Deg_Rate)
c = ("SIM_" + str(i+2) + ";" + variant + ";" + MET + ";" + name + "_Year" + str(i) + "_" + f'{deg:.2f}' + "%modrate.csv" +";" + f'{deg:.2f}' +";")
print(c)
任务::在csv文件中从第20行(单元格A20)到第50行(单元格A50)插入字符串“ c”,以使原始A20-A24单元格分别转换为A51-A55单元格
with open('Books.csv', 'r') as csv_file, open('Books.csv', 'a') as write_file:
reader = csv.reader(csv_file, delimiter =";")
j = 0
for row in reader:
if j < row[19]:
row.append(c)
print(row)
我无法插入新行并用新数据覆盖books.csv。
编辑:这是Books.csv文件的屏幕截图。我想从A20开始插入内容。
答案 0 :(得分:2)
我认为无法同时读取和追加文件,但是您的文件似乎不大,因此也许首先读取它的内容并追加新行并随后保存?
修改
感谢截图。好像;
不是列定界符,因为单元格内的值还包含;
。分隔符可能是,
,但我认为这并不重要,因为如果我理解正确的话,您只想将行保持为 。因此,不需要csv.reader
,只需使用readlines()
阅读纯文本中的行,例如:
import csv
variant = "VC4"
MET = "cutting.MET"
name = "Rob"
Base_ModQual = -0.8
Deg_rate = 0.30
Num_Years = 30
INSERT_ROW = 20
new_content = []
with open('Books.csv', 'r') as csv_file:
#reader = csv.reader(csv_file, delimiter =',')
reader = csv_file.readlines()
for i, row in enumerate(reader):
if i == INSERT_ROW:
for i in range(Num_Years+1):
deg = (Base_ModQual + (i)*Deg_rate)
c = ("SIM_" + str(i+2) + ";" + variant + ";" + MET + ";" + name + "_Year" + str(i) + "_" + f'{deg:.2f}' + "%modrate.csv" +";" + f'{deg:.2f}' +";")
new_content.append(c + '\n')
else:
new_content.append(row)
with open('Books.csv', 'w') as csv_file:
for line in new_content:
csv_file.write(line)