Python基础 | 数据文件的读写
本文总结使用Python对常见的数据文件进行读写操作。
- 本文所用的示例数据下载,提取码: sjgz
- pandas官网的数据I/O部分是很好的学习材料
txt
txt的读入
## 文件读取
# 文件路径
file_in = os.path.join(workdir,'Data/demo_text.txt')
# 打开文件
f_in = open(file_in, encoding='utf-8')
# 将每行的文本读取,并存为列表
# 此处使用.rstrip()去除右侧的空格、换行符等
lines_raw = [x.rstrip() for x in f_in]
# 或者
# lines_raw = [l.rstrip() for l in f.readlines()]
print(lines_raw)
# 关闭文件
f_in.close()
如果txt内部存储的是表格(dataframe)格式的数据,那么可以直接用pandas.read_csv来读取。
df_txt = pd.read_csv(file_in, names=['txt'], encoding='utf-8')
df_txt.head()
txt的写出
# 文件输出
file_out = os.path.join(workdir,'Data/out_text.txt')
f_out = open(file_out, encoding='utf-8',mode = 'w')
f_out.writelines(lines_raw)
f_out.close()
上面的列子是一次写入所有行。
也可以使用.writeline方法一行一行写入,比如写log日志。
# 程序执行的日志
file_log = os.path.join(workdir,'Data/run_log.txt')
f_log = open(file_log, encoding='utf-8',mode = 'w')
for i in range(5):
line = 'this is %d run \n'%i
f_log.write(line)
f_log.close()
csv
csv即逗号分隔的文件,可以使用的包
pandas在数据分析中最常用,功能也很强大,这里只示范pandas的用法
# 定义文件路径
file_csv = os.path.join(workdir,'Data/demo_csv.csv')
# pandas.read_csv()函数来读取文件
df_csv = pd.read_csv(file_csv,sep=',',encoding='utf-8')
# dataframe.to_csv()保存csv文件
# 保存文件的时候一定要注意encoding
df_csv.to_csv('out_csv',index=False,encoding='utf-8')
也可以用来读取在线的文件,文件的后缀可能是txt、data之类的,不过没关系,只要里面存的是表格(dataframe)格式的数据,就可以用pandas.read_csv来读取。
#此处使用UCI机器学习用的数据
url_data = 'https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data'
# 字段描述见https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.names
df_adult = pd.read_csv(url_data, sep=',', names = col_names,index_col=None)
xls\xlsx
pandas工具包中也提供了相应的函数来读写excel文件(pandas.read_excel()和dataframe.to_excel())。
更多参考
不同于csv文件,xlsx文件中会有多个sheet,pandas.read_excel函数默认读取第一个sheet.
# 定义文件路径
file_excel = os.path.join(workdir,'Data/demo_xlsx.xlsx')
# pandas.read_excel()函数来读取文件
# sheet_name=0表示读取第一个sheet,也可以指定要读取的sheet的名称(字符串格式)
# header=0 表示使用第一行作为表头(列名)
# 如果数据中没有列名(表头),可以设置header=None,同时names参数来指定list格式的列名
df_excel = pd.read_excel(file_excel,sheet_name=0,header=0,encoding='utf-8')
# dataframe.to_csv()保存csv文件
# 保存文件的时候一定要注意encoding
df_excel.to_excel('out_excel.xlsx',index=False,encoding='utf-8')
如果我们是想在单元格颗粒度上进行操作,可以考虑两个工具包:
这里用xlwings示范自动化“填表”,比如现在有3个项目对应的3个单元格需要填写。
@w=500
如果要批量从多个统一格式的excel文件中读取多个单元格或者写入数据,可参考如下代码。
import xlwings as xw
file_excel = os.path.join(workdir,'Data/demo_填表.xlsx')
# 打开excel文件的时候不要展示页面
app = xw.App(visible=False)
# 打开工作簿
wb = xw.Book(file_excel)
# 打开工作表
# 可以用index,可以指定sheet的名称
ws = wb.sheets[0]
# 读取对应单元格的值
print(ws.range('A1').value)
ws.range('B1').value = 'Ahong'
ws.range('B2').value = '男'
ws.range('B3').value = 'Pyhon'
# 保存工作簿
wb.save()
# 也可以保存为新的文件名,e.g.wb.save('new.xlsx')
# 关闭工作簿
wb.close()
在线网页数据
在线网页数据通常需要网络爬虫来抓取,同时网页是半结构化的数据,需要整理为结构化的数据。
关于网络爬虫可以参考如下两本书:
- Web Scraping with Python: Collecting More Data from the Modern Web, Ryan Mitchell, O’Reilly书系,中文版是Python网络爬虫权威指南
- Python 3网络爬虫开发实战,崔庆才,也可以访问作者的博客
常用的工具
网页数据的爬取和解析常会用到的工具包
lxml, 解析网页中的css目录很好用
[json](https://docs.python.org/3/library/json.html, 处理json格式数据),json和html是常见的半结构化数据
pandas,主要是对结构化的数据(dataframe)进行处理
爬虫的步骤
通常网络爬虫的步骤如下:
- 分析网页请求规范,比如是get还是post,请求的url是啥,返回的数据是什么格式(json?静态html?),header参数,url或者post中的变量有什么等;
- 获取网页数据,使用requests包;
- 解析网页数据(将半结构化的网页数据转化为结构化数据),BeautifulSoup、lxml、re、json齐上阵;
- 整合数据并存档,使用pandas对数据进行整合并初步清洗。
参考资料:
对于pdf文件而言,如果要对文档操作(比如合并、筛选、删除页面等),建议使用的工具包:
处理pdf文件时,要注意文件需要是“无密码”状态,“加密”状态的文件处理时会报错。
pdf解密工具推荐:
这里举例说明两个包的用法:筛选奇数页面并保存为新文档。
pdfrw
from pdfrw import PdfReader
pdf_r = PdfReader(os.path.join(workdir,'Data/demo_pdf.pdf'))
from pdfrw import PdfWriter
pdf_w = PdfWriter()
page_cnt = pdf_r.numPages
# 筛选奇数页面
for i in range(0,page_cnt,2):
pdf_w.addpage(pdf_r.pages[i])
pdf_w.write('filtered_pages.pdf')
y.write('dd.pdf')
PyPDF2
import PyPDF2
# 读入文件路径
file_in = os.path.join(workdir,'Data/demo_pdf.pdf')
# 打开要读取的pdf文件
f_in = open(file_in,'rb')
# 读取pdf文档信息
pdfReader = PyPDF2.PdfFileReader(f_in)
# pdf文件页面数
page_cnt = pdfReader.getNumPages()
pdfWriter = PyPDF2.PdfFileWriter()
# 筛选奇数页面
for page_idx in range(0,page_cnt,2):
page = pdfReader.getPage(page_idx)
pdfWriter.addPage(page)
# 输出文档
file_out = open('pdf_out.pdf', 'wb')
pdfWriter.write(file_out)
# 关闭输出的文件
file_out.close()
# 关闭读入的文件
# pdf_file.close()
提取文档信息
如果要解析pdf文件的页面数据(文件上都写了啥),推荐的工具包为:
- textract,该工具包支持多种格式文件的数据提取
- pdfminer.six,使用方法同pdfminer是一样的。pdfminer的使用方法参考这里
安装好pdfminer.six后,直接在命令行中调用如下命令即可:
pdf2txt.py demo_pdf.pdf -o demo_pdf.txt
或者参考stackoverflow问答可以自定义一个函数批量对pdf进行转换(文末附有该函数)。
批量提取PDF内容的代码
# ref: https://stackoverflow.com/questions/26494211/extracting-text-from-a-pdf-file-using-pdfminer-in-python
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
text = retstr.getvalue()
fp.close()
device.close()
retstr.close()
return text
textract使用示例
import textract
# 文件路径
file_pdf = os.path.join(workdir,'Data/demo_pdf.pdf')
# 提取文本
text = textract.process(file_pdf)
word文档
其他统计软件生成文件
可以使用的工具包:
pandas.read_sas,pandas.read_spss,pandas.read_stata- pyreadstat,可以读取SAS,SPSS,Stata等统计软件导出的数据文件。
SPSS生成的.sav文件
# 使用Python读取.sav文件
# https://github.com/Roche/pyreadstat
import pyreadstat
# 文件路径
file_data = os.path.join(workdir,'Data/demo_sav.sav')
# 读取文件
df,meta = pyreadstat.read_sav(file_data)
# df就是转化后的数据框
# 查看编码格式
print(meta.file_encoding)
pyreadstat包还可以读取sas,stat的数据文件
| Function in this package | Purpose |
|---|---|
| read_sas7dat | read SAS sas7bdat files |
| read_xport | read SAS Xport (XPT) files |
| read_sas7bcat | read SAS catalog files |
| read_dta | read STATA dta files |
| read_sav | read SPSS sav and zsav files |
| read_por | read SPSS por files |
| set_catalog_to_sas | enrich sas dataframe with catalog formats |
| set_value_labels | replace values by their labels |
Python基础 | 数据文件的读写的更多相关文章
- 七. Python基础(7)--文件的读写
七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- 第二篇:python基础之文件读写
python基础之文件读写 python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- 营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理
摘要:你知道吗,MySQL在实际工作时候的两种数据读写机制? 本文分享自华为云社区<MySQL日志顺序读写及数据文件随机读写原理>,作者:JavaEdge . MySQL在实际工作时候的两 ...
- Python基础笔记2-ruamel.yaml读写yaml文件
上一篇笔记记录了Python中的pyyaml库对yaml文件进行读写,但了解到ruamel.yaml也能对yaml文件进行读写,于是想尝试一下它的用法. 一,注意 这里首先要更正一下网上大部分博客的说 ...
- python入门基础:文件的读写
文件的读写操作运用广泛,无论是何种语言都会涉及到文件的输入输出. 下面简单的总结一下文件的读写: 1:open()函数 f = open('workfile', 'w') 函数 open()返回文件的 ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- python中 对文件的读写操作 以及如何边写入 边保存flush()
转自:https://blog.csdn.net/t8116189520/article/details/78854708 首先 python中打开文件大致常用的几类如下: 1.写入文件write # ...
随机推荐
- Java Enum 枚举的简单使用
一.什么是枚举 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型必须是一个内置的有符号(或无符号)整数类型(如 ...
- 查漏补缺:进程间通信(IPC):管道
管道是UNIX系统IPC的最古老形式,所有UNIX系统都提供此种通信机制.管道有以下两种局限性: (1)历史上,管道是半双工的(即数据只能在一个方向上流动). (2)管道只能在具有公共先祖的两个进程之 ...
- js作用域其二:预解析
文章目錄 解析机制 JavaScript是一门解释型的语言 , 想要运行js代码需要两个阶段 编译阶段: 编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript ...
- [红日安全]Web安全Day3 - CSRF实战攻防
本文由红日安全成员: Once 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字 ...
- 【深入理解Java虚拟机】类的初始化过程
类的初始化过程 类的加载过程.png 加载 将 Class 文件以二进制的形式加载到内存中 验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的 ...
- Haproxy 使用block 阻止域名访问到某个子目录报403
配置教程如下: acl is_https_com hdr_beg(host) www.baidu.com #定义规则域名 acl api_block_url_web url_dir -i /web/ ...
- web资源预加载-生产环境实践
此文记录资源预加载在我们项目的实践,技术难度不算高,重在介绍一套技术方案的诞生与实施,其中都进行了哪些思考,依据什么来做决策,如何进行效果评估,等等.为读者在制定技术方案时提供一定启示. 背景 资源预 ...
- springDataJPA笔记
springDataJPA笔记 第一 orm思想 主要目的:操作实体类就相当于操作数据库表 建立两个映射关系: 实体类和表的映射关系 实体类中属性和表中字段的映射关系 不再重点关注:sql语句 实现了 ...
- SpringBoot整合Swagger2案例,以及报错:java.lang.NumberFormatException: For input string: ""原因和解决办法
原文链接:https://blog.csdn.net/weixin_43724369/article/details/89341949 SpringBoot整合Swagger2案例 先说SpringB ...
- 前端性能优化之 Composite
摘要: 一个 Web 页面的展示,简单来说可以认为经历了 JavaScript/Style/Layout/Paint/Composite 几个步骤.本文主要深入 Composite 部分,从渲染原理. ...