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

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

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

  1. folders = ['F:/a/b/input_data/Sample documents/xyz/',
  2. 'F:/a/b/input_data/Sample documents/abc/',
  3. 'F:/a/b/input_data/Sample documents/pqr/']
  4. allmypdfs = []
  5. for folder in folders:
  6. alllfiles = os.listdir(folder)
  7. firstpdfs = ""
  8. for i in alllfiles:
  9. if '.pdf' or '.PDF' in i:
  10. firstpdfs = i
  11. print('PDF-Names--', firstpdfs)
  12. break
  13. with open(folder + firstpdfs, 'rb') as fh:
  14. for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
  15. page_interpreter.process_page(page)
  16. text = fake_file_handle.getvalue()
  17. texts = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff]', '', text) # to remove \x0c escape chars
  18. allmypdfs.append(texts)
  19. # dataframe creation
  20. data = {'PDF NAME': firstpdfs, 'Text Data': [allmypdfs]}
  21. df = pd.DataFrame(data)
  22. df1 = df.explode('Text Data')
  23. print(df1.head(50))

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

  1. allmypdfs = []
  2. files = []
  3. for folder in folders:
  4. alllfiles = os.listdir(folder)
  5. firstpdfs = ""
  6. for i in alllfiles:
  7. if '.pdf' or '.PDF' in i:
  8. firstpdfs = i
  9. print('PDF-Names--', files.append(firstpdfs))
  10. break
  11. with open(folder + firstpdfs, 'rb') as fh:
  12. for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
  13. page_interpreter.process_page(page)
  14. text = fake_file_handle.getvalue()
  15. texts = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff]', '', text) # to remove \x0c escape chars
  16. allmypdfs.append(texts)

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

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

我得到的结果是:

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

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

lrl1mhuk

lrl1mhuk1#

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

  1. # print file name of first PDF found in this folder
  2. print('PDF-Names--', firstpdfs)
  3. # append file name to list of files
  4. files.append(firstpdfs)

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

  1. data_list = []
  2. for folder_name in folders:
  3. # TODO: first PDF files in the directory <folder_name> and return <file_name>
  4. with open(file_name, 'rb') as fh:
  5. # TODO: extract text from file and return as binary string in variable <text>
  6. # store data in a dictionary and append to the list
  7. data_list.append({'PDF NAME': file_name, 'Text Data': text})
  8. # convert list of dictionaries to pandas.DataFrame object
  9. data = pd.DataFrame(data_list)

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

展开查看全部

相关问题