Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取csv文件,在行/单元格中插入新计算的值,并覆盖相同的csv文件_Python_Loops_Csv_Insert_Append - Fatal编程技术网

Python 读取csv文件,在行/单元格中插入新计算的值,并覆盖相同的csv文件

Python 读取csv文件,在行/单元格中插入新计算的值,并覆盖相同的csv文件,python,loops,csv,insert,append,Python,Loops,Csv,Insert,Append,我想读取一个名为Books.csv的csv文件,该文件包含多行,并在第19行之后插入新行。每行值仅限于其第一个单元格(A1到A24) 我已经计算/迭代了一个名为“c”的字符串,该字符串由30行组成 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

我想读取一个名为Books.csv的csv文件,该文件包含多行,并在第19行之后插入新行。每行值仅限于其第一个单元格(A1到A24)

我已经计算/迭代了一个名为“c”的字符串,该字符串由30行组成

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)
将open('Books.csv','r')作为csv\u文件,将open('Books.csv','a')作为write\u文件:
reader=csv.reader(csv_文件,分隔符=“;”)
j=0
对于读取器中的行:
如果j
我无法插入新行并用新数据覆盖books.csv

编辑:这是Books.csv文件的屏幕截图。我想从20开始插入内容


我认为不可能同时读取和追加,但您的文件似乎不大,所以可能先读取其内容,然后追加新行,然后保存

编辑

谢谢你的截图。好像是
不是列分隔符,因为单元格内的值也包含
。分隔符可能是
,但我认为这并不重要,因为——如果我理解正确的话——您只想保持行的原样。因此,无需使用
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)


我认为不可能同时读取和附加,但您的文件似乎不大,所以可能先读取其内容并附加新行,然后保存

编辑

谢谢你的截图。好像是
不是列分隔符,因为单元格内的值也包含
。分隔符可能是
,但我认为这并不重要,因为——如果我理解正确的话——您只想保持行的原样。因此,无需使用
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)


感谢您建议先阅读,然后添加新行。我在csv_文件的最后一行中遇到以下错误。write(第[0]+'\n'行)“indexer:列表索引超出范围”在不使用
[0]
的情况下尝试,因此
csv_文件。write(第+'\n'行)
。或者你能给我一个你的Books.csv文件的样本,mybe前3行吗?我已经在原始评论中添加了Books.csv文件的屏幕截图
csv\u file.write(line+'\n')
get错误
TypeError:只能将list(而不是“str”)连接到list
我编辑了我的帖子,你能尝试一下新的解决方案吗?:-)谢谢我得到错误
TypeError:write()参数必须是str,而不是最后一行的list
。我将最后一行更改为
csv_file.write(str(line))
以获得输出,但是,输出文件没有像原始文件中那样保留最上面的行(A1-A19)。csv感谢建议先读取,然后追加新行。我在csv_文件的最后一行中遇到以下错误。write(第[0]+'\n'行)“indexer:列表索引超出范围”在不使用
[0]
的情况下尝试,因此
csv_文件。write(第+'\n'行)
。或者你能给我一个你的Books.csv文件的样本,mybe前3行吗?我已经在原始评论中添加了Books.csv文件的屏幕截图
csv\u file.write(line+'\n')
get错误
TypeError:只能将list(而不是“str”)连接到list
我编辑了我的帖子,你能尝试一下新的解决方案吗?:-)谢谢我得到错误
TypeError:write()参数必须是str,而不是最后一行的list
。我将最后一行更改为
csv_file.write(str(line))
以获得输出,但是,输出文件没有像原始文件Books.csv中那样保留最上面的行(A1-A19)