python 生成器一次解析一个文件

python generator parsing one file at a time

我经常有一个包含一堆 csv 文件或 excel 或 html 等的文件夹。 我厌倦了总是写一个循环遍历文件夹中的文件,然后用适当的库打开它们,所以我希望我可以构建一个生成器,一次生成一个文件,该文件已经用适当的库打开图书馆。 这是我一直希望做的事情:

def __get_filename__(file):
    lst = str(file).split('\')[-1].split('/')[-1].split('.')
    filename, filetype = lst[-2], lst[-1]
    return filename, filetype

def file_iterator(file_path, parser=None, sep=None, encoding='utf8'):
    import pathlib as pl
    if parser == 'BeautifulSoup':
        from bs4 import BeautifulSoup
    elif parser == 'pandas':
        import pandas as pd

    for file in pl.Path(file_path):
        if file.is_file():
            filename, filetype = __get_filename__(file)
            if filetype == 'csv' and parser == 'pandas':
                yield pd.read_csv(file, sep=sep)
            elif filetype == 'excel' and parser == 'pandas':
                yield pd.read_excel(file, engine='openpyxl')
            elif filetype == 'xml' and parser == 'BeautifulSoup':
                with open(file, encoding=encoding, errors='ignore') as xml:
                    yield BeautifulSoup(xml, 'lxml')
            elif parser == None:
                print(filename, filetype)
                yield file

但我的希望和梦想破灭了:P 如果我这样做:

for file in file_iterator(r'C:\Users\hwx756\Desktop\tmp/'):
    print(file)

这会引发错误 TypeError: 'WindowsPath' object is not iterable

我相信一定有办法以某种方式做到这一点,我希望有人比我聪明得多:) 谢谢!

如错误所述 'WindowsPath' object is not iterable,您的行 for file in pl.Path('...'): 导致错误,因为您正在尝试迭代它。我之前没有使用过 pathlib 库,但是通过查看文档,如果你这样做 for file in pl.Path('...').iterdir(): 那应该允许你以你似乎正在尝试的方式遍历你的目录。

所以这就是我认为你应该做的。 通过此获取文件夹中所有文件的名称

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(folder_path) if isfile(join(folder_path, f))]

使该路径成为绝对路径并使用该绝对路径读取 pandas

中的文件

该文件也有拼写错误

        yield pd.read_excel(path, engine='openpyxl')

没有路径