我写了一个代码,基本上从所有文件夹中选择第一个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...
请帮助我了解如何使其以正确的方式工作。
1条答案
按热度按时间lrl1mhuk1#
自方法
append()
从list
对象返回None
,print('PDF-Names--', files.append(firstpdfs))
必须打印PDF-Names-- None
在你的控制台上。我猜你的意图是这样的:
关于 Dataframe ,在循环之后构建字典,其中
firstpdfs
是上次访问的文件夹中第一个pdf的名称。您正在从单个词典创建表({'PDF NAME': firstpdfs, 'Text Data': [allmypdfs]}
). 然而,它的目的是从字典列表中创建一个。使用这个模式您可能希望实现更简洁的命名和压缩编写(wirte小函数,因为它们更易于维护和调试),以避免丢失对代码的概述