如何通过python csv()函数读取目录中的多个csv文件?

时间:2018-07-13 08:36:17

标签: python csv

在我的目录之一中,我有多个CSV文件。我想通过python代码读取所有CSV文件的内容并打印数据,但直到现在我还是不能这样做。

所有CSV文件的列数和列名也相同。

我知道一种列出目录中所有CSV文件并通过“ os”模块和“ for”循环遍历它们的方法。

for files in os.listdir("C:\\Users\\AmiteshSahay\\Desktop\\test_csv"):

现在使用“ csv”模块读取文件名

reader = csv.reader(files)

直到这里,我希望输出是CSV文件的名称。碰巧被排序了。例如,名称是1.csv,2.csv等。但输出如下

<_csv.reader object at 0x0000019F97E0E730>
<_csv.reader object at 0x0000019F97E0E528>
<_csv.reader object at 0x0000019F97E0E730>
<_csv.reader object at 0x0000019F97E0E528>
<_csv.reader object at 0x0000019F97E0E730>
<_csv.reader object at 0x0000019F97E0E528>

如果我在csv.reader()之后添加next()函数,则会得到下面的输出

['1']
['2']
['3']
['4']
['5']
['6']

这恰好是我的CSV文件名的缩写。部分正确,但不完全正确。

除此之外,一旦我迭代了文件,如何在屏幕上查看CSV文件的内容?今天我有6个档案。以后,我可能有100个文件。因此,在我的方案中不可能使用文件处理方法。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我建议您使用pandas库读取CSV。 在这里检查答案:Import multiple csv files into pandas and concatenate into one DataFrame

尽管您一般都要求使用python,但pandas在数据I / O方面做得很好,在我看来会为您提供帮助。

答案 1 :(得分:0)

  

直到这里,我希望输出是CSV文件的名称

这是问题所在。 csv.reader个对象不代表文件名。它们代表惰性对象,可以对其进行迭代以从CSV文件中产生行。或者,如果您希望打印整个 CSV文件,则可以在list对象上调用csv.reader

for files in os.listdir("C:\\Users\\AmiteshSahay\\Desktop\\test_csv"):
    reader = csv.reader(files)
    print(list(reader))
  

如果我在csv.reader()之后添加next()函数,则会得到下面的输出

是的,这就是您应该期望的。在迭代器上调用next将为您提供该迭代​​器中的下一个值。这将是每个文件的第一行。例如:

from io import StringIO
import csv

some_file = StringIO("""1
2
3""")

with some_file as fin:
    reader = csv.reader(fin)
    print(next(reader))

['1']
  

恰好被排序。例如,名称是1.csv,2.csv,等等。

这是文件名和相应文件内容之间的巧合或相关。调用next(reader)不会输出文件名的一部分。

  

除此之外,一旦我迭代了文件,如何查看   屏幕上的csv文件的内容?

使用print命令,如上例所示。

  

今天我有6个文件。以后,我可能有100个文件。所以不是   可以在我的方案中使用文件处理方法。

这不是事实。您可以定义一个功能来打印全部或部分或您的csv文件。然后在for循环中以文件名作为输入来调用该函数。

答案 2 :(得分:0)

在开发项目期间,我发现最简单的方法是使用dataframe,read_csv和glob。

import glob
import os
import pandas as pd

folder_name = 'train_dataset'
file_type = 'csv'
seperator =','
dataframe = pd.concat([pd.read_csv(f, sep=seperator) for f in glob.glob(folder_name + "/*."+file_type)],ignore_index=True)

在这里,所有csv文件都加载到1个大数据帧中。

Project Folder structure