使用if-loop python在我的列表中保存文件名时出现问题

dl5txlt9  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(393)

我写了一个代码,基本上从所有文件夹中选择第一个pdf,然后从所有pdf中提取文本数据。我正在将这些提取的pdf文本数据保存到数据框中。我还想将pdf文件的名称保存到我的数据框中,问题是,它一直在我的数据框中写入最近的pdf文件名,而忽略其余的pdf文件名。
这是我的密码:

folders = ['F:/a/b/input_data/Sample documents/xyz/',
           'F:/a/b/input_data/Sample documents/abc/',
           'F:/a/b/input_data/Sample documents/pqr/']
allmypdfs = []
for folder in folders:
    alllfiles = os.listdir(folder)
    firstpdfs = ""
    for i in alllfiles:
        if '.pdf' or '.PDF' in i:
            firstpdfs = i
            print('PDF-Names--', firstpdfs)
            break
    with open(folder + firstpdfs, 'rb') as fh:
        for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
            page_interpreter.process_page(page)

        text = fake_file_handle.getvalue()
        texts = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff]', '', text)  # to remove \x0c escape chars
        allmypdfs.append(texts)

# dataframe creation

data = {'PDF NAME': firstpdfs, 'Text Data': [allmypdfs]}
df = pd.DataFrame(data)
df1 = df.explode('Text Data')
print(df1.head(50))

我曾尝试创建一个数据框,用于在if循环中捕获pdf文件名,然后将其附加到文本数据中,但这并没有得到正确的输出(因为它每次都在if循环中创建一个新的数据框)。我也尝试过先创建一个空列表,然后再添加文件名,但这样在输出中就没有了。这样地

allmypdfs = []
files = []
for folder in folders:
    alllfiles = os.listdir(folder)
    firstpdfs = ""
    for i in alllfiles:
        if '.pdf' or '.PDF' in i:
            firstpdfs = i
            print('PDF-Names--', files.append(firstpdfs))
            break
    with open(folder + firstpdfs, 'rb') as fh:
        for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
            page_interpreter.process_page(page)

        text = fake_file_handle.getvalue()
        texts = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff]', '', text)  # to remove \x0c escape chars
        allmypdfs.append(texts)

这给了我一个类似的输出 PDF-Names-- None 我想要的输出应该是

0 PDF NAME Text Data
0 1.pdf     ofkndv....
1 2.pdf     dfgnnrjon...

我得到的结果是:

0 PDF NAME Text Data
0 1.pdf     ofkndv....
1 1.pdf     dfgnnrjon...

请帮助我了解如何使其以正确的方式工作。

lrl1mhuk

lrl1mhuk1#

自方法 append()list 对象返回 None , print('PDF-Names--', files.append(firstpdfs)) 必须打印 PDF-Names-- None 在你的控制台上。
我猜你的意图是这样的:


# print file name of first PDF found in this folder

print('PDF-Names--', firstpdfs)

# append file name to list of files

files.append(firstpdfs)

关于 Dataframe ,在循环之后构建字典,其中 firstpdfs 是上次访问的文件夹中第一个pdf的名称。您正在从单个词典创建表( {'PDF NAME': firstpdfs, 'Text Data': [allmypdfs]} ). 然而,它的目的是从字典列表中创建一个。使用这个模式

data_list = []
for folder_name in folders:
    # TODO: first PDF files in the directory <folder_name> and return <file_name>
    with open(file_name, 'rb') as fh:
        # TODO: extract text from file and return as binary string in variable <text>
    # store data in a dictionary and append to the list
    data_list.append({'PDF NAME': file_name, 'Text Data': text})

# convert list of dictionaries to pandas.DataFrame object

data = pd.DataFrame(data_list)

您可能希望实现更简洁的命名和压缩编写(wirte小函数,因为它们更易于维护和调试),以避免丢失对代码的概述

相关问题