【问题标题】:Python Code to Copy lines from One CSV to Another and Add ColumnPython代码将行从一个CSV复制到另一个并添加列
【发布时间】:2021-09-23 14:47:52
【问题描述】:

我正在尝试使用 Python 将行从一个 csv 文件复制到另一个文件,并将数据添加到该过程中的新列。数据已正确复制到新文件中,但都被复制到新文件的同一行。

file = "C:/original_file.csv"
nf = "C:/file_updated.csv"

i = 0

with open(file, 'r') as origFile:
    with open(nf, 'w') as newFile:

        lineList = []
        for line in origFile:
            strippedLine = line.strip()
            lineList = strippedLine.split(',')

            lineList.append("C:/ATT" + str(i) + "_PHOTO 1.jpg")
            lineStr = str(lineList)
            lineStr = lineStr.replace("'", "")

            newFile.write(lineStr)
            print lineList
            i += 1

origFile.close()
newFile.close()

我怎样才能让第一个文件的每一行都复制到新文件的单独一行?

【问题讨论】:

  • 我认为使用 pandas 可以毫不费力地做到这一点。你有什么理由只想使用 python 吗?
  • 唯一的原因是缺乏熊猫的经验。但我会调查的。
  • 如果你想用 pandas 解决它,那么我建议你看看这个解决方案:stackoverflow.com/questions/58274401/…。然后有一个简单的 csv 保存功能。

标签: python csv


【解决方案1】:
file = "C:/original_file.csv"
nf = "C:/file_updated.csv"

i = 0

with open(file, 'r') as origFile:
    with open(nf, 'w') as newFile:

        lineList = []
        for line in origFile:
            strippedLine = line.strip()
            lineList = strippedLine.split(',')

            lineList.append("C:/ATT" + str(i) + "_PHOTO 1.jpg")
            lineStr = str(lineList)
            lineStr = lineStr.replace("'", "")

            newFile.write(lineStr)
            newFile.write('\n') #Insert a new line
            print lineList
            i += 1

origFile.close()
newFile.close()

【讨论】:

  • 谢谢!这正是我所需要的。
【解决方案2】:

无需安装pandas,内置的csv库非常适合这个!!

$ cat tmp.csv
first,second
third,fourth
import csv

to_read = "./tmp.csv"
to_write = "./tmp2.csv"

with open(to_read, newline="") as to_read_fp, open(to_write, "w", newline="") as to_write_fp:
    reader = csv.reader(to_read_fp)
    writer = csv.writer(to_write_fp)

    for count, row in enumerate(reader):
        row.append(f"C:/ATT{count}_PHOTO 1.jpg")
        writer.writerow(row)
$ cat tmp2.csv
first,second,C:/ATT0_PHOTO 1.jpg
third,fourth,C:/ATT1_PHOTO 1.jpg

【讨论】:

    【解决方案3】:

    如果您想在没有任何导入的情况下执行此操作,您可以尝试这样的方法,它会添加一个标题为 New Field 的新列。

    当然它假定原始 CSV 有一个标题行。

    file = "original_file.csv"
    nf = "file_updated.csv"
    
    with open(file, 'r') as origFile:
        data = [line.strip().split(',') for line in origFile.readlines()]
    
    header = data[0]
    data = data[1:]
    header.append('New Field')       
    data = [line + [f'C:/ATT{idx}_PHOTO 1.jpg'] for idx, line in enumerate(data)]
    data = [','.join(line) for line in [header]+data]
            
    with open(nf, 'w') as newFile:
        newFile.writelines('\n'.join(data))
    
    """
    SAMPLE INPUT
    Field1,Field2
    Data1,Data2
    Data3,Data4
    
    
    SAMPLE OUTPUT
    Field1,Field2,New Field
    Data1,Data2,C:/ATT0_PHOTO 1.jpg
    Data3,Data4,C:/ATT1_PHOTO 1.jpg
    """
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多