使用Python读取目录中的所有csv文件

FaC*_*fee 10 python csv for-loop numpy genfromtxt

我希望这不是微不足道的,但我想知道以下内容:

如果我有一个包含n个 csv文件的特定文件夹,我怎么能一次一个地迭代读取所有文件,并对它们的值执行一些计算?

例如,对于单个文件,我执行类似的操作并对x数组执行一些计算:

import csv
import os

directoryPath=raw_input('Directory path for native csv file: ') 
csvfile = numpy.genfromtxt(directoryPath, delimiter=",")
x=csvfile[:,2] #Creates the array that will undergo a set of calculations
Run Code Online (Sandbox Code Playgroud)

我知道我可以检查csv给定文件夹中有多少文件(请点击此处):

import glob
for files in glob.glob("*.csv"):
    print files 
Run Code Online (Sandbox Code Playgroud)

但是我没有弄清楚如何将numpy.genfromtxt()函数嵌套在for循环中,所以我读入了一个目录的所有csv文件,由我来指定.

编辑

我只有的文件夹jpgcsv文件.后者是命名的eventX.csv,其中X的范围是1到50.因此,for我所指的循环应该按照它们的方式考虑文件名.

小智 14

我就是这样做的:

import os

directory = os.path.join("c:\\","path")
for root,dirs,files in os.walk(directory):
    for file in files:
       if file.endswith(".csv"):
           f=open(file, 'r')
           #  perform calculation
           f.close()
Run Code Online (Sandbox Code Playgroud)

  • 作为一个注释,推荐的打开文件的方式是"打开(文件)作为文件",这有利于在超出范围时自动关闭 (2认同)
  • @FrancescoCastellani提出您的第一个问题:您可以这样做,但您将无法对该文件执行任何其他操作.至于第二个,它只列出目录中的所有文件.如果您想要一个目录中所有文件夹中的所有文件,您可以将目录中的每个文件夹存储在列表中,然后一次从每个文件夹中获取.csv. (2认同)

小智 11

使用 pandas 和 glob 作为基础包

import glob
import pandas as pd

glued_data = pd.DataFrame()
for file_name in glob.glob(directoryPath+'*.csv'):
    x = pd.read_csv(file_name, low_memory=False)
    glued_data = pd.concat([glued_data,x],axis=0)
Run Code Online (Sandbox Code Playgroud)


plo*_*ser 5

我想你在找这样的东西

import glob

for file_name in glob.glob(directoryPath+'*.csv'):
    x = np.genfromtxt(file_name,delimiter=',')[:,2]
    # do your calculations
Run Code Online (Sandbox Code Playgroud)

编辑

如果csv要从文件夹(包括子文件夹)中获取所有文件,可以使用subprocess代替glob(请注意,此代码仅在linux系统上有效)

import subprocess
file_list = subprocess.check_output(['find',directoryPath,'-name','*.csv']).split('\n')[:-1]

for i,file_name in enumerate(file_list):
    x = np.genfromtxt(file_name,delimiter=',')[:,2]
    # do your calculations
    # now you can use i as an index
Run Code Online (Sandbox Code Playgroud)

它首先使用find外壳程序中的命令在文件夹和子文件夹中搜索所有file_name ,然后应用您的计算。