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

     2023-02-23     255

关键词:

【中文标题】使用 Python 从目录中读取所有 csv 文件【英文标题】:Read in all csv files from a directory using Python 【发布时间】:2016-02-03 21:26:12 【问题描述】:

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

如果我有一个包含 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

我知道我可以检查给定文件夹中有多少 csv 文件(检查 here):

import glob
for files in glob.glob("*.csv"):
    print files 

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

编辑

我的文件夹只有jpgcsv 文件。后者被命名为eventX.csv,其中 X 的范围是 1 到 50。因此,我所指的 for 循环应该考虑文件名的本来面目。

【问题讨论】:

【参考方案1】:

我就是这样做的:

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()

【讨论】:

可以在我定义x=csvfile[:,2] 之后直接放置f.close() 行吗?数字2 只是示例性的。 而且,如果我可以补充一下,您的代码是否会检查 directory 内所有文件夹中的所有 csv 文件? 作为说明,推荐打开文件的方式是with open(file) as file这样的好处是超出范围会自动关闭 @FrancescoCastellani 第一个问题:您可以执行此操作,但无法对文件执行任何其他操作。至于第二个,它只列出一个目录中的所有文件。如果您想要一个目录中所有文件夹中的所有文件,您可以将目录中的每个文件夹存储在一个列表中,然后一次从每个文件夹中获取 .csv。 能否解释一下这行,os.path.join("c:\\","path")【参考方案2】:

使用 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)

【讨论】:

【参考方案3】:

我认为您正在寻找类似的东西

import glob

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

编辑

如果您想从一个文件夹(包括子文件夹)中获取所有 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

它首先使用 shell 中的 find 命令在文件夹和子文件夹中搜索所有文件名,然后再应用您的计算。

【讨论】:

嗯,我非常喜欢这个方便而简短的解决方案,但我对其进行了测试,但它并没有达到我想要的效果。我创建了一个新的空文件夹,在其中放置了三个名为 file_1.csvfile_2.csvfile_3.csvcsv 文件,每个文件都有值 123 作为唯一值(没有标题)。然后我创建了a=numpy.zeros(3) 用这些值填充它,但我得到了a=([0,0,0])。在for 循环中,a 的新值分配如下:a[file_name]=numpy.genfromtxt(file_name,delimiter=',')[0,0]。而不是a=([1,2,3]) 我得到a=([0,0,0]) 嗯……它适用于我的简单示例……让我检查一下可能出了什么问题…… @FrancescoCastellani : file_name 是我的代码中的一个字符串...a[file_name] 是什么意思? a[...] 需要一个整数...没有错误吗? 不,没有错误。我试图使用file_name 作为计数器变量,因为它包含此测试用例的确切文件数(和值)。我编这个只是为了测试你的提示。如果我们不能使用file_name 作为计数器,我们可以使用什么?我们是否应该添加一个嵌套循环来添加一个范围为 1 到 3 的计数器? 哦,那么问题是您使用 Windows,因为(据我所知)命令 find 不存在(或不起作用),因为我在程序中使用了它。 ...嗯,让我看看我是否可以重写那部分以便为你工作【参考方案4】:

根据numpy.genfromtxt()的documentation,第一个参数可以是一个

要读取的文件、文件名或生成器。

这意味着你可以编写一个生成器来生成所有文件的行,如下所示:

def csv_merge_generator(pattern):
    for file in glob.glob(pattern):
        for line in file:
            yield line

# then using it like this

numpy.genfromtxt(csv_merge_generator('*.csv')) 

应该可以。 (我没有安装 numpy,所以无法轻松测试)

【讨论】:

你的最后一行会嵌套在for 循环中吗? nonono,它在生成器中传递,因此获取所有文件【参考方案5】:

这里有一个更简洁的方法来做到这一点,给定一些path = "/path/to/dir/"

import glob
import pandas as pd

pd.concat([pd.read_csv(f) for f in glob.glob(path+'*.csv')])

然后你可以将你的计算应用到整个数据集,或者,如果你想一个一个地应用它:

pd.concat([process(pd.read_csv(f)) for f in glob.glob(path+'*.csv')])

【讨论】:

使用 python-3.x 从 zip 存档中读取 CSV 文件

】使用python-3.x从zip存档中读取CSV文件【英文标题】:ReadingCSVfilesfromziparchivewithpython-3.x【发布时间】:2018-05-0918:20:23【问题描述】:我有一个压缩存档,其中包含多个csv文件。例如,假设myarchive.zip包含myfile1.csv、myfile2.csv、myfile3.... 查看详情

使用 Python 查找目录中的所有 CSV 文件

】使用Python查找目录中的所有CSV文件【英文标题】:FindallCSVfilesinadirectoryusingPython【发布时间】:2012-03-0307:44:24【问题描述】:如何在python中找到扩展名为.csv的目录中的所有文件?【问题讨论】:看起来像***.com/questions/3964681/…... 查看详情

从巨大的 CSV 文件中读取随机行

...程序只允许在文件中按顺序迭代。将所有文件读入内存以使用一些随机选择非常消耗内存,并且遍历所有文件并丢弃一些值并选择其他值非常耗时,所以有什么方法可以选 查看详情

快速读取所有 csv 文件并更新共享字典

...ictionary【发布时间】:2019-02-1302:27:42【问题描述】:我是python和pandas的新手,但这就是我想做的。我想通读目录中的所有csv文件并从文件中检索一个数据单元格并更新字典上的计数,检索值是字典中的键。我必须为约6000个csv文... 查看详情

使用 spark/scala 从 HDFS 目录中获取所有 csv 文件名

】使用spark/scala从HDFS目录中获取所有csv文件名【英文标题】:FetchingallthecsvfilenamesfromHDFSdirectoryusingspark/scala【发布时间】:2020-04-2111:12:03【问题描述】:有人可以指导我如何使用scala从我的HDFS目录中只获取.csv文件。我正在尝试从... 查看详情

有没有办法使用给定目录中的 numpy.genfromtxt 从 csv 读取数据?

】有没有办法使用给定目录中的numpy.genfromtxt从csv读取数据?【英文标题】:Isthereawaytoreaddatafromcsvusingnumpy.genfromtxtfromagivendirectory?【发布时间】:2021-11-2016:04:21【问题描述】:我应该通过argparse读取csv文件路径。例如,csv文件的路... 查看详情

Python 从所有子目录中读取 JSON 文件

】Python从所有子目录中读取JSON文件【英文标题】:PythonreadJSONfilesfromallsub-directories【发布时间】:2019-11-1322:36:03【问题描述】:我有以下文件夹结构:Directory-Subdirectory1:file.json-Subdirectory2:file.json-Subdirectory3:file.json-Subdirectory4:file.j... 查看详情

如何从 csv 文件中读取日期/时间字段并在 python 中相应地绘制图表

...python【发布时间】:2011-06-2622:26:03【问题描述】:我正在使用pythoncsv模块从CSV文件中导入记录。日期/时间字段要求日期采用特定格式,但不同的电子表格程序默认使用不同类型的格式而且我不希望用 查看详情

将数据从 csv 读取到类对象列表中 - Python

】将数据从csv读取到类对象列表中-Python【英文标题】:Readdatafromcsvintolistofclassobjects-Python【发布时间】:2018-12-0401:46:49【问题描述】:我无法弄清楚这一点。基本上我有一个.csv文件,其中包含7名员工的姓名、员工ID、部门编号... 查看详情

Python 从 CSV 读取数据

...问题。假设在文件中我有从1990年到2020年的数据。我可以使用什么命令仅获取2000年以上的年份?假设文件中的日期具有这种格式\'2000-12-02\'我如何将其添加到列表中,因为我认为它们目前是字符串,我无法进行预测,因为我需要 查看详情

如何从 Python 中的目录中读取 n 个文件?

...件夹,并列出其中的所有文件和目录。为了获取路径,我使用如下简单的方法:defopen_path():dialog=QFileDialog()folder_path=dialog.getExist 查看详情

从 S3 存储桶中读取大量 CSV 文件

...桶中读取大量csv文件。CSV文件位于不同的分区中。我正在使用Boto3列出所有到csv的路径。然后使用for循环在列表上迭代,将csv文件读入spark数据帧。我需要一种更好的优化方法来从S3路径读取大量文件,因为循环是一种线性方法,... 查看详情

使用 Python 将文件从多个目录复制到一个目录

】使用Python将文件从多个目录复制到一个目录【英文标题】:CopyfilesfrommultipledirectoriesintoonedirectoryusingPython【发布时间】:2015-06-2311:42:54【问题描述】:使用python将文件从多个目录复制到一个目录中的最简单方法是什么?更清楚... 查看详情

python pandas没有从csv文件中读取第一列

】pythonpandas没有从csv文件中读取第一列【英文标题】:pythonpandasnotreadingfirstcolumnfromcsvfile【发布时间】:2014-03-2101:23:36【问题描述】:我有一个简单的2列csv文件,名为st1.csv:GRIDSt11457614145865714596791460732146175414628111463748但是,当我... 查看详情

如何从csv文件中读取python中的数字?

】如何从csv文件中读取python中的数字?【英文标题】:Howtoreadnumbersinpythonfromcsvfile?【发布时间】:2015-10-1019:07:42【问题描述】:我有一个csv文件,我必须计算一些列的平均值。我就是这样做的:file=csv.reader(open(\'tab.csv\',\'r\'))n=[]f... 查看详情

python爬虫编程思想(81):csv文件存储

...特定字符分隔的文本,结构清晰简单。所有在很多场景下使用CSV文件保存数据是比较方便的。本节会介绍如何使用PythonAPI向CSV文件写入数据,以及从CSV文件读取数据。 查看详情

python中怎么读取csv文件

Python读取CSV文件方法如下:如下是一个CVS文件使用Python打开CSV可以直接使用open函数打开,然后使用reader函数读取内容,实现代码如下:参考技术APython读取CSV文件方法如下:如下是一个CVS文件使用Python打开CSV可以直接使用open函数... 查看详情

如果所有值都在同一列中,如何从 csv 文件中读取数据?

】如果所有值都在同一列中,如何从csv文件中读取数据?【英文标题】:Howtoreaddatafromcsvfileifallthevaluesareinthesamecolumn?【发布时间】:2018-01-1304:52:21【问题描述】:我有一个格式如下的csv文件:"age","job","marital","education","default","bal... 查看详情