将多个csv中的数据提取到python中的单个数据帧中

时间:2019-12-01 01:23:54

标签: python python-3.x python-2.7

我在一个位置上有多个csv文件。我想从每个csv中提取两个字段,并将它们全部附加到一个CSV文件中。 以下是我在每个CSV文件中的信息:

呵呵/// n ojwiehu你好:18:ddjhhfudhfuhughfugh:12N: 赢得23459 Hondrus juerheuhrhk kji9 @! kfddhfhih9

每个csv中都有此类信息,我需要提取两个字段:

1。)在:18:和:12N之间的文本: 2.)WIN和Hondrus之间的文本

输出将包含来自每个csv的2列,并附加到一个数据帧中

有人可以帮我编写脚本吗? 目前,我正在运行下面的代码以从csv之一中提取信息。但是,我需要一个脚本,该脚本将从所有CSV中提取信息并将其附加到其中。

with open("data.csv", "r", encoding='UTF-8') as fobj:
    text = fobj.read()
import re
a = re.compile(':18:(.*) :12N:')
b=re.compile('WIN(.*)HONDRUS')
z = a.findall(text)
k=b.findall(text)
print (z)
print (k)

2 个答案:

答案 0 :(得分:0)

Nitesh,您可以使用glob捕获数组中可以循环播放的所有文件:

import glob
glob.glob('*.csv')
# ['1.csv',
# '2.csv',
# '3.csv',
# '4.csv']

这是脚本的修改版本,可以将它们全部放入列表中,然后可以将其作为csv逐行写出:

import glob
files = glob.glob('*.csv')
strings = []
for file in files:
  with open(file, "r", encoding='UTF-8') as fobj:
      text = fobj.read()
  import re
  a = re.compile(':18:(.*) :12N:')
  b=re.compile('WIN(.*)Hondrus')
  z = a.findall(text)
  k=b.findall(text)
  strings.append(z[0] + "," + k[0])

答案 1 :(得分:0)

您可以像建议的@oppressionslayer一样使用glob,也可以使用sys。做这样的事情:

import sys
import pandas as pd

path = 'path_to_your_files'
files = [name for name in os.listdir(path)]

df = pd.Dataframe()

df = pd.concat((pd.read_csv(os.path.join(path,f),
 usecols=['18', '12N']) for f in files),
 ignore_index=True).reset_index()

不确定我是否正确获得了列名。如果您可以提供一段数据,将会很有帮助。