Python:从目录中读取文件并连接该文件

问题描述:

我有一个文件夹et.csv文件,我尝试读取并下一个连接并获取一个文件。 我尝试Python:从目录中读取文件并连接该文件

import os 

path = 'et/' 
for filename in os.listdir(path): 
    et = open(filename) 
    print et 

,但我得到一个错误

Traceback (most recent call last): 
File "C:/Users/����� �����������/Desktop/projects/PMI/join et.py", line 5, in <module> 
et = open(filename) 
IOError: [Errno 2] No such file or directory: '0et.csv' 

我不明白,为什么我得到这个错误,因为当我 print filename 我得到

0et.csv 
1et.csv 
2et.csv 
3et.csv 
4et.csv 
5et.csv 
6et.csv 
7et.csv 
8et.csv 

使用glob.glob将是一个更好的选择,并使用os.path.join获取完整路径:

from glob import glob 
from os.path import join, abspath 
from os import listdir, getcwd 

import pandas as pd 

data_frame = pd.DataFrame() 
dir_path = "et" 
full_path = join(abspath(getcwd()), dir_path, "*.csv") 
for file_name in glob(full_path): 
    csv_reader = pd.read_csv(file_name, names=columns) 
    # Guessing that all csv files will have the header 
    #If header is absent, use names=None 
    data_frame = data_frame.append(csv_reader, ignore_index=True) 
    # There is also a concat funtion to use. I am comfortable with append 
    # For concat, it will be data_frame = pd.concat(data_frame, csv_reader, ignore_index=True) 
  1. ABSPATH将确保从根本上完整目录(在Windows的情况下,从主文件系统驱动器)采取
  2. 添加* .CSV与加盟将确保你将检查CSV文件与目录
  3. glob(full_path)将返回给定目录的绝对路径的csv文件列表
  4. 始终确保您要么显式关闭文件描述符,要么使用with语句来执行它自动,因为这是一个干净的做法。任何C开发人员都可以证明关闭文件描述符是最好的。因为我们需要把值放在数据框中,所以我拿出了with语句并添加了来自熊猫的read_csv。
  5. 在阅读csv时,pandas.read_csv会让生活更美好,以防将csv文件内容写入数据框。使用read_csv和pandas append(或concat),我们可以轻松编写csv文件,而无需从其他csv文件写入标头内容。由于个人意见,我已经附加了。增加了如何在评论中使用concat。
+0

你能说,我应该用什么来连接这些文件?我尝试了'frames = []'并且在循环中我做了'file = fp.read()frames.append(file)'和next'df = pd.concat(frames)'但它返回了巨大的列表,但是我想要获取数据帧 –

+0

你的意思是你想要一个包含所有csv内容的文件? – thiruvenkadam

+0

是的,我想连接这个路径中的所有文件,并得到一个'csv' –

你可能要使用et = open(path+filename),而不是仅仅使用et = open(filename)

编辑:由@thiruvenkadam最佳实践的建议是使用et = open(os.path.join(path,filename))

+1

使用os.path.join而不是字符串'+'操作 – thiruvenkadam

+0

你能说,我该如何连接它?我尝试'frames = []',并在循环中执行'file = et.read() frames.append(et)'和next'df = pd.concat(frames)',但它返回TypeError:无法并置一个非NDFrame对象' –

+0

@PetrPetrov这里是一个可能的错误'frames.append(file)'而不是'frames.append(et)'。如果这还不够,你应该开一个新的问题。 – jadsq

也许这是编码问题

您可以尝试在你的代码的顶部添加以下代码

# -*- coding: utf-8 -*-