【问题标题】:How to read many of .CSV files with different names in python? [duplicate]如何在 python 中读取许多具有不同名称的 .CSV 文件? [复制]
【发布时间】:2019-07-08 06:28:37
【问题描述】:

假设我有 1000 个.CSV 文件,其中包含我的员工姓名。所以文件名中没有任何顺序或数字。有没有办法用 Python 语言对计算机说,在一个特殊的文件夹中从头到尾读取文件,不管它们的名字是什么? (数据是给谁的,对我来说并不重要,我只需要抓取这些数据进行分析)。

【问题讨论】:

标签: python windows csv file-read


【解决方案1】:

您可以像这样读取目录中的所有 csv 文件:

我的 csv:

col1,col2,col3
a,b,c
d,e,f

代码:

import glob
import csv

PATH = "/Users/stack/"

for file in glob.glob(PATH+"*.csv"):
    with open(file) as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
        for row in spamreader:
            print(" ".join(row))

输出:

col1 col2 col3
a b c
d e f

Process finished with exit code 0

【讨论】:

  • 感谢 madik,我尝试了您的代码,但在这一行 PATH = "C:\Users\m\Desktop\TSE" 我得到了 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
  • 这个addaption PATH = r"C:\Users\m\Desktop\TSE" 解决的错误,我可以毫无错误地构建程序,但是除了[Finished in 0.1s]之外没有特殊的输出。如何查看读取文件的内容?
  • 你也可以像 pandas 库那样做吗?
  • 请检查更新的答案@user3486308
【解决方案2】:

使用如下代码:(将当前路径 (.) 替换为您的路径:

import os, fnmatch
import csv
listOfFiles = os.listdir('.')  
pattern = "*.csv"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        with open(entry, newline='') as csvfile:
            spamreader = csv.reader(csvfile)
            for line in spamreader:
                print(line)
##########使用 Danadas 包
import os, fnmatch
import pandas as pd

listOfFiles = os.listdir('.')  
pattern = "*.csv"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        read_File_as_DF=pd.read_csv(entry)
        print(read_File_as_DF)

【讨论】:

  • 您的代码似乎读取了.txt 文件而不是.csv 文件。
  • 更改 .txt 它也适用于 csv
  • 太好了,成功了!你能写一个熊猫版本吗?我认为 Python 初学者更容易理解和工作!
  • 我用你的代码得到的一行输出是这样的 ['13971115', '1020002.00', '1020002', '1020002', '1020002.00', '1020002.00', '1021098', '130', '1'] 。如何删除` ' ` 引号?还要将此读取的数据保存为矩阵吗? (我有numpy 用于矩阵工作)。
  • 使用pandas版本就可以解决,只要在read_csv函数中正确使用分隔符和qua toes即可
【解决方案3】:

是的,你可以。我会使用一个简单的基于正则表达式的测试器来检查文件,所以基本上你正在做的是你正在使用 for 循环来遍历目录并使用 if 语句,我们测试文件以查看它是否包含 '. .csv'。在此之后,我们打开文件并将其附加到我们的输出中,您可以选择分析或存储为文件。我已经注释掉了输出到文件的选项,但是如果你愿意的话。

import re

# Redefine this to the path of your folder:
folderPath = "SET UNIX PATH HERE"

output = None
for file in os.listdir(folderPath):
    if re.search(r'.csv', file):
        with open(file, r) as readFile:
            output += readFile.read()

# Uncomment this part if you would like to store the output to a file
# Define the path to the file that will be created:
# outputFilePath = "SET UNIX PATH"
# with open(outputFilePath, w+) as outputFile:
#     outputFile.write(output)

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-04
    • 2019-10-02
    • 1970-01-01
    • 2018-02-15
    • 2022-12-06
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多