向已存在的CSV文件中append新的行数据

         循环将多个txt文件中的数据append到已存在的csv中,换行,不删除已有数据

读入的d0a32932-d418-4290-9fb3-02318fb37039.txt数据格式:
61 11 163 103
126 42 247 125
318 217 492 381
422 22 502 94

输出的csv数据格式:

c59c9f2e-8a6d-455c-83c1-584c285ecf33.jpg 470_14_27_35;501_20_32_25;746_22_49_71;65_135_93_117
"""
File: txtToCsv.py
Author: Yao Lee
"""

import csv
import os

# 读取需要被写的文件数据
def get_lines(filepath):
    with open(filepath) as file_object:
        lines = set(file_object.readlines())
        return lines


def new_csv(lines,file):
    count = len(lines)-1
    print("total line" + str(count))
    data = []
    # 为了给csv文件中新建行的第一项特殊的标识,先用0占位
    data.append('0')
    print (file)    #输出你读进来的文件名
    # 循环操作读进来的每一行数据
    for index, line in enumerate(lines):
        if(len(line)>4):
            index += 1
            line= line.split(' ')
            # 本次读入的txt文件是数字的列表,下面是构造想要输出的格式
            w= int(line[3])-int(line[1])
            h= int(line[2])-int(line[0])
            line[2]= str(w)
            line[3]=str(h)
            line= line[0]+'_'+line[1]+'_'+line[2]+'_'+line[3]
            oneline = line.strip()
            data.append([oneline])
    # 为了append到csv文件中新的行,将数字格式的数据转为str格式
    data = [';'.join(map(str,t)) for t in data]
    # 过滤掉不需要的数据
    if(len(data)>2):
        # 为了保证读入的列表输出在一个table中进行拼接操作
        for i in range(2,len(data)):
            data[1]=data[1]+';'+data[i]

    name = file.split('.')[0]+'.jpg'
    # 保证输出两个维度
    lastdata = []
    lastdata.append(name)
    lastdata.append(data[1])

    # 将处理好的数据append到固定的csv
    with open('../2.csv', 'a') as newFile:
        newFileWriter = csv.writer(newFile,delimiter=",")
        newFileWriter.writerow(lastdata)


if __name__ == "__main__":
    path = "dataSet Path"
    list = []
    files = os.listdir(path)
    for file in files:
        filepath = path + "/" + file
        if os.path.isfile(filepath):
            lines = get_lines(filepath)
            new_csv(lines,file)

 

你可能感兴趣的:(Python)