分别用 'r' 与 'rb' 方式打开、read()读取下面文件,并打印输出,查看区别 '07-8-pic_char.txt'
时间: 2023-12-22 21:02:35 浏览: 15
以下是使用 'r' 方式打开、read()读取并输出文件的代码:
```
with open('07-8-pic_char.txt', 'r') as f:
data = f.read()
print(data)
```
以下是使用 'rb' 方式打开、read()读取并输出文件的代码:
```
with open('07-8-pic_char.txt', 'rb') as f:
data = f.read()
print(data)
```
两段代码的区别在于打开文件的方式。'r' 方式表示以文本模式打开文件,'rb' 方式表示以二进制模式打开文件。在文本模式下,Python会自动将读取的数据转换为字符串,而在二进制模式下,读取的数据不会被自动转换。因此,使用 'r' 方式读取文件时,输出的内容是文件中的字符串;而使用 'rb' 方式读取文件时,输出的内容是文件中的二进制数据(即字节串)。
相关问题
-- coding: utf-8 -- import PyPDF2 import sys import io # 创建一个文本输出流,包装标准输出 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') # 创建一个txt文件并打开文件对象 with open('output1.txt', 'w', encoding='utf-8') as txt_file: # 打印包含特殊字符的字符串 s = 'PDF文件头信息:\xae' txt_file.write(s + '\n') # 打开PDF文件 pdf_file = open('x1/hunan28.pdf', 'rb') # 创建一个PDF读取器对象 pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 打印PDF文件头信息 pdf_info = pdf_reader.getDocumentInfo() txt_file.write('PDF文件头信息:\n') for key, value in pdf_info.items(): try: txt_file.write(f'{key}: {value}\n') except UnicodeEncodeError: txt_file.write(f'{key}: {" ".join(value.split())}\n') # 打印PDF文件体信息 for page_num in range(pdf_reader.getNumPages()): page = pdf_reader.getPage(page_num) page_content = page.extractText().encode('utf-8') txt_file.write(f'第{page_num+1}页的内容:\n{page_content}\n') # 打印PDF交叉引用表信息 txt_file.write('PDF交叉引用表信息:\n' + str(pdf_reader.xref) + '\n') # 打印PDF文件尾信息 txt_file.write('PDF文件尾信息:' + str(pdf_reader.trailer) + '\n') # 关闭PDF文件和txt文件 pdf_file.close() txt_file.close()上述代码添加将字符串分门别类提取出各个对象信息,保存起来
你的代码已经可以将 PDF 文件的信息提取出来并保存到一个 txt 文件中了。如果你想要将不同类型的信息分门别类,可以在保存信息的时候添加标识符或者分隔符,这样就可以方便地对不同类型的信息进行提取和处理。比如:
```python
# 打印PDF文件头信息
txt_file.write('=== PDF文件头信息 ===\n')
for key, value in pdf_info.items():
try:
txt_file.write(f'{key}: {value}\n')
except UnicodeEncodeError:
txt_file.write(f'{key}: {" ".join(value.split())}\n')
# 打印PDF文件体信息
txt_file.write('=== PDF文件体信息 ===\n')
for page_num in range(pdf_reader.getNumPages()):
page = pdf_reader.getPage(page_num)
page_content = page.extractText().encode('utf-8')
txt_file.write(f'第{page_num+1}页的内容:\n{page_content}\n')
# 打印PDF交叉引用表信息
txt_file.write('=== PDF交叉引用表信息 ===\n')
txt_file.write(str(pdf_reader.xref) + '\n')
# 打印PDF文件尾信息
txt_file.write('=== PDF文件尾信息 ===\n')
txt_file.write(str(pdf_reader.trailer) + '\n')
```
上述代码在保存不同类型的信息时,添加了标识符,方便后续处理。
# -*- coding: utf-8 -*- import PyPDF2 import sys import io # 创建一个文本输出流,包装标准输出 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gbk') # 创建一个txt文件并打开文件对象 with open('output7.txt', 'w', encoding='utf-8') as txt_file: # 打印包含特殊字符的字符串 s = 'PDF文件头信息:\xae' txt_file.write(s + '\n') # 打开PDF文件 pdf_file = open('x1/2023凯程333教育综合应试解析-外国教育史(OCR).pdf', 'rb') # 创建一个PDF读取器对象 pdf_reader = PyPDF2.PdfFileReader(pdf_file,strict=False) # 打印PDF文件头信息 pdf_info = pdf_reader.getDocumentInfo() txt_file.write('PDF文件头信息:\n') for key, value in pdf_info.items(): try: txt_file.write(f'{key}: {value}\n') except UnicodeEncodeError: txt_file.write(f'{key}: {" ".join(value.split())}\n') # 打印PDF文件体信息 for page_num in range(pdf_reader.getNumPages()): page = pdf_reader.getPage(page_num) txt_file.write(f'第{page_num+1}页的内容:\n{page.extractText()}\n') # 打印PDF交叉引用表信息 txt_file.write('PDF交叉引用表信息:\n' + str(pdf_reader.xref) + '\n') # 打印PDF文件尾信息 txt_file.write('PDF文件尾信息:' + str(pdf_reader.trailer) + '\n') # 关闭PDF文件和txt文件 pdf_file.close() txt_file.close()使用pdfminer修改上述代码
下面是使用pdfminer修改后的代码,可以提取PDF文本和元数据信息:
```
# -*- coding: utf-8 -*-
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
# 创建一个文本输出流,包装标准输出
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gbk')
# 创建一个txt文件并打开文件对象
with open('output7.txt', 'w', encoding='utf-8') as txt_file:
# 打开PDF文件
with open('x1/2023凯程333教育综合应试解析-外国教育史(OCR).pdf', 'rb') as pdf_file:
# 创建一个PDF解析器对象
parser = PDFParser(pdf_file)
# 创建一个PDF文档对象
document = PDFDocument(parser)
# 检查文档是否可用
if not document.is_extractable:
raise PDFTextExtractionNotAllowed
# 创建一个PDF资源管理器对象
rsrcmgr = PDFResourceManager()
# 创建一个PDF设备对象
laparams = LAParams()
device = TextConverter(rsrcmgr, txt_file, laparams=laparams)
# 创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 打印PDF文件头信息
pdf_info = document.info
txt_file.write('PDF文件头信息:\n')
for key, value in pdf_info.items():
try:
txt_file.write(f'{key}: {value}\n')
except UnicodeEncodeError:
txt_file.write(f'{key}: {" ".join(value.split())}\n')
# 打印PDF文件体信息
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
# 打印PDF文件尾信息
txt_file.write('PDF文件尾信息:' + str(document.info) + '\n')
# 关闭txt文件
txt_file.close()
```
需要注意的是,使用pdfminer需要先安装pdfminer模块,可以使用`pip install pdfminer`命令进行安装。同时,需要注意PDF文件中可能会有不规范的编码或加密等问题导致解析失败,需要考虑相关处理。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)