在我的目录之一中,我有多个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个文件。因此,在我的方案中不可能使用文件处理方法。
有什么建议吗?
答案 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)