【问题标题】:Read a csv file, insert newly calculated values in rows/cells and overwrite the same csv file读取 csv 文件,在行/单元格中插入新计算的值并覆盖相同的 csv 文件
【发布时间】:2019-09-23 02:53:31
【问题描述】:

我想读取一个名为 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 开始插入内容。

【问题讨论】:

    标签: python loops csv insert append


    【解决方案1】:

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

    编辑

    感谢您的屏幕截图。似乎; 不是列分隔符,因为单元格内的值也包含;。分隔符可能是,,但我认为这并不重要,因为——如果我理解正确的话——你只想保持行原样。所以不需要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_file.write(line[0] + '\n') "IndexError: list index out of range" 收到以下错误
    • 尝试不使用[0],所以csv_file.write(line + '\n') 。或者你能给我一个你的 Books.csv 文件的样本,我是前 3 行吗?
    • 我在原始评论中添加了 books.csv 文件的屏幕截图。 csv_file.write(line + '\n') 得到 TypeError: can only concatenate list (not "str") to list 的错误
    • 我编辑了我的帖子,你能试试新的解决方案吗? :-)
    • 谢谢。我在最后一行收到错误TypeError: write() argument must be str, not list。我将最后一行更改为 csv_file.write(str(line)) 以获取输出但是,输出文件并没有像原始文件 Books.csv 中那样保留最上面的行(A1-A19)
    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多