2016-09-19 210 views
1

我有一個文件夾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 

回答

0

使用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' –

0

你可能要使用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

-1

也許這是編碼問題

您可以嘗試在你的代碼的頂部添加以下代碼

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