有没有办法从多个文本文件中提取多个数据,并将其保存为新的.csv文件中的一行?

2024-09-28 20:45:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以从python中的文本文件中提取多个数据片段,并将其保存为新的.csv文件中的一行?我需要对多个输入文件执行此操作,并将所有输入文件的输出保存为单个.csv文件。你知道吗

我以前从来没有用过Python,所以我很笨。我以前用过matlab,我知道如果是数字我会怎么用matlab(但不幸的是它是文本,这就是为什么我要尝试python)。所以为了清楚起见,我需要在.csv输出文件中为输入文件中的每个“ID”添加一行新行。 数据示例如下(2个单独的文件)

EXAMPLE DATA - FILE 1:
id,ARI201803290
version,2
info,visteam,COL
info,hometeam,ARI
info,site,PHO01
info,date,2018/03/29
id,ARI201803300
data,er,corbp001,2
version,2
info,visteam,COL
info,hometeam,ARI
info,site,PHO01
info,date,2018/03/30
data,er,delaj001,0



EXAMPLE DATA - FILE 2:
id,NYN201803290
version,2
info,visteam,SLN
info,hometeam,NYN
info,site,NYC20
info,usedh,false
info,date,2018/03/29
data,er,famij001,0
id,NYN201803310
version,2
info,visteam,SLN
info,hometeam,NYN
info,site,NYC20
info,date,2018/03/31
data,er,gselr001,0

我希望得到一个.csv格式的数据与所有的细节,从一个“id”在一行。每个文本文件有多个“id”,并且有多个文件。我想对多个文本文件重复此过程,以便输出在同一个.csv输出文件中。我希望输出在.csv文件中如下所示,每一条信息都作为一个新单元格:

ARI201803290 COL ARI PHO01 2018/03/29 2
ARI201803300 COL ARI PHO01 2018/03/30 0
NYN201803290 SLN NYN NYC20 2018/03/29 0
NYN201803310 SLN NYN NYC20 2018/03/31 0

如果我在matlab中做的话,我会使用for循环和If语句

j=1
k=1
for i=1:size(myMatrix, 1)

if file1(i;1)==id
output(k,1)=(i;2)
k=k+1

else if 
file1(i;1)==info && file1(i;1)==info
output(j,2)=(i;3) 
j=j+1

等等。。。。。你知道吗

然而,我显然不能在matlab中这样做,因为我有逗号分隔的文本文件,而不是矩阵。有人对如何将我的想法转化为python代码有什么建议吗?或任何其他建议。我对python非常陌生,所以愿意尝试任何可能有用的东西。你知道吗

事先非常感谢!你知道吗


Tags: 文件csvinfoiddatadateversionsite
1条回答
网友
1楼 · 发布于 2024-09-28 20:45:29

python非常灵活,可以很容易地完成这些工作

python中有很多csv工具/模块可以处理几乎所有类型的csv和excel文件,但是我更喜欢将csv处理为与文本文件相同的文件,因为csv只是一个带有逗号分隔文本的文本文件,所以简单比复杂好

下面的代码用注释解释了其中的大部分内容,您可以调整它以完全符合您的需要

import os

input_folder = 'myfolder/'  # path of folder containing the text files on your disk

# create a list with file names with their full paths using list comprehension
data_files = [os.path.join(input_folder, file) for file in os.listdir(input_folder)]

# open our csv file for writing
csv = open('myoutput.csv', 'w')  # better to open files with context manager like below but i am trying to show you different methods 

def write_to_csv(line):
    print(line)
    csv.write(line)

# loop thru your text files
for file in data_files:
    with open(file, 'r') as f:  # use context manager to open files (best practice)
        buff = []
        for line in f:
            line = line.strip()  # remove spaces and new lines
            line = line.split(',')  # split line to list of values
            if buff and line[0] == 'id':  # hit another 'id'
                write_to_csv(','.join(buff) + '\n')
                buff = []
            buff.append(line[-1]) # add the last word in line
        write_to_csv(','.join(buff) + '\n')


csv.close()  # must close any open file handles opened manually "no context manager i.e. no with"

输出:

ARI201803290,2,COL,ARI,PHO01,2018/03/29,2
ARI201803300,2,COL,ARI,PHO01,2018/03/30,0
NYN201803290,2,SLN,NYN,NYC20,false,2018/03/29,0
NYN201803310,2,SLN,NYN,NYC20,2018/03/31,0

相关问题 更多 >