簡體   English   中英

Python讀取CSV文件列並在csv文件中寫入文件名和列名

[英]Python read CSV file columns and write file name and column name in a csv file

我有許多CSV文件,需要讀取循環中的所有文件並寫入文件名以及輸出文件中的所有列(第1行中的標題)。

輸入CSV文件1 (test1.csv)

Id, Name, Age, Location
1, A, 25, India

輸入CSV文件2 (test2.csv)

Id, ProductName
1, ABC

輸出文件

test1.csv  Id
test1.csv  Name
test1.csv  Age
test1.csv  Location
test2.csv  Id
test2.csv  ProductName

非常感謝您的幫助。

更新:此代碼可以很好地用於此目的:

import os
import csv

ofile = open('D:\Anuj\Personal\OutputFile/AHS_File_Columns_Info.csv', 'w')

directory = os.path.join('D:\Anuj\Personal\Python')

for root, dirs, files in os.walk(directory):
    for file in files:
            fullfilepath = directory + "/" + file
            with open(fullfilepath,'r') as f:
                output = file +','+ f.readline()
                ofile.write(output)

但是我不確定我是否正確理解你。

import csv
from typing import List
from typing import Tuple

TableType = List[List[str]]


def load_csv_table(file_name: str) -> Tuple[List[str], TableType]:
    with open(file_name) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        headers = next(csv_reader)
        data_table = list(csv_reader)
        return headers, data_table


def save_csv_table(file_name: str, headers: List[str], data_table: TableType):
    with open(file_name, 'w', newline='') as csv_file:
        writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        writer.writerow(headers)
        for row in data_table:
            writer.writerow(row)


input_files = ['file1.csv', 'file2.csv', 'file3.csv']
new_table = []
new_headers = []
for file_name in input_files:
    headers, data_table = load_csv_table(file_name)
    if not new_headers:
        new_headers = ['Source'] + headers
    new_table.extend(([file_name] + line for line in data_table))
save_csv_table('output.csv', new_headers, new_table)

一種簡單的方法是在文件對象上使用readline()

files=["test1.csv","test2.csv"]
for my_file in files:
    with open(my_file,'r') as f:
        print my_file, f.readline()

使用csv模塊進行讀取寫入的csv解決方案

  • 打開輸出文件並在其句柄上創建一個csv.writer實例
  • 打開每個輸入文件並在其句柄上創建一個csv.reader實例
  • csv.reader迭代器上使用next獲取第一行:以列表的形式獲取標題(進行少量后期處理以刪除空格)
  • 在循環中在當前文件名旁邊寫標題

碼:

import csv

files=["test1.csv","test2.csv"]
with open("output.tsv","w",newline='') as fw:
    cw = csv.writer(fw,delimiter="\t")  # output is tab delimited
    for filename in files:
        with open(filename,'r') as f:
            cr = csv.reader(f)
            # get title
            for column_name in (x.strip() for x in next(cr)):
                cw.writerow([filename,column_name])

使用csv模塊有幾個優點,最重要的是正確管理引號和多行字段/標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM