本文总结使用Python对常见的数据文件进行读写操作。

注:我这有个学习基地,里面有很多学习资料,感兴趣的+Q群:895817687

常见的数据文件类型如下:

txt

csv

excel(xls\xlsx)

在线网页数据

pdf\word

其他数据软件格式

1 txt文件

文件读取

# 文件input

file_txt = os.path.join(workdir,'Data/demo_text.txt')

# 打开文件

f = open(file_txt, encoding='utf-8')

# 将每行的文本读取,并存为列表

# 此处使用.rstrip()去除空格、换行符

lines_raw = [x.rstrip() for x in f]

# 或者

# lines_raw = [l.rstrip() for l in f.readlines()]

print(lines_raw)

# 关闭文件

f.close()

输出如下:

['010杜甫:佳人', '', '绝代有佳人,幽居在空谷。', '自云良家子,零落依草木。', '关中昔丧乱,兄弟遭杀戮。', '官高何足论,不得收骨肉。', '世情恶衰歇,万事随转烛。', '夫婿轻薄儿,新人美如玉。', '合昏尚知时,鸳鸯不独宿。', '但见新人笑,那闻旧人哭!', '在山泉水清,出山泉水浊。', '侍婢卖珠回,牵萝补茅屋。', '摘花不插发,采柏动盈掬。', '天寒翠袖薄,日暮倚修竹。']

也可以用pandas来读取

df_txt = pd.read_csv(file_txt, names=['txt'], encoding='utf-8')

df_txt.head()

输出如下:

在这里插入图片描述

文件输出

# 文件output

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()

2 csv文件

# 定义文件路径

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文件

df_csv.to_csv('out_csv.csv',index=False,encoding='utf-8')

# 查看dataframe前3行

df_csv.head(3)

输出如下:

在这里插入图片描述

也可以把csv当做文本文件来读取,不过处理过程稍微复杂点,尤其是字段内的取值中含有分隔符(比如逗号)时,例如上面的name字段。

3 excel(xls\xlsx)文件在这里插入代码片

pandas工具包中也提供了相应的函数来读写excel文件(pandas.read_excel()和dataframe.to_excel())。

更多参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_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文件

df_excel.to_excel('out_excel.xlsx',index=False,encoding='utf-8')

# 查看dataframe前3行

df_excel.head(3)

这里用xlwings示范自动化“填表”,比如现在有3个项目对应的3个单元格需要填写。

在这里插入图片描述

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()

如果要批量从多个统一格式的excel文件中读取多个单元格或者写入数据,不妨考虑此方法。

4 在线网页数据

通常网络爬虫的步骤如下:

分析网页请求规范,比如是get还是post,请求的url是啥,返回的数据是什么格式(json?静态html?),header参数,url或者post中的变量有什么等;

获取网页数据,使用requests包;

解析网页数据(将半结构化的网页数据转化为结构化数据),BeautifulSoup、lxml、re、json齐上阵;

整合数据并存档,使用pandas对数据进行整合并初步清洗。

处理pdf文件时,要注意文件需要是“已解密”或者“无密码”状态,“加密”状态的文件处理时会报错。

pdf解密工具推荐:

http://freemypdf.com/

https://smallpdf.com/unlock-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文件的页面数据(文件上都写了啥),推荐的工具包为:

安装好pdfminer.six后,直接在命令行中调用如下命令即可:

import textract

# 文件路径

file_pdf = os.path.join(workdir,'Data/demo_pdf.pdf')

# 提取文本

text_raw = textract.process(file_pdf)

# 转码

text = text_raw.decode('utf-8')

5.2 读取Word文件

6 其他数据软件文件

比如SAS, SPSS,Stata等分析软件导出的数据格式。

可以使用的工具包pyreadstat, https://github.com/Roche/pyreadstat

# 使用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)

df.head()

更多参考

https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html

Automate the Boring Stuff with Python: Practical Programming for Total Beginners

附PDF文件转字符串的函数

-----------------------------------------------------

注:我这有个学习基地,里面有很多学习资料,感兴趣的+Q群:895817687

-----------------------------------------------------

# 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

如果喜欢看小编的文章记得关注走一波,另外小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

python对文件操作的统一步骤_基于Python实现对各种数据文件的操作相关推荐

  1. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  2. python做一副54扑克牌发牌_基于Python制作一副扑克牌过程详解

    整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去大王.小王之后的 52 张扑克牌,并实现随机抽牌.排序.洗牌等功能: 创建一个纸牌类 一副扑克除去大王小王之外,剩下的 52 ...

  3. python在材料模拟中的应用_基于Python的ABAQUS二次开发及在板料快速冲压成形模拟中的应用...

    2009 doi :10 1 3969/ j 1 issn 1 1007 2 2012 1 2009 1 04 1 013 基于 Python 的 ABAQUS 二次开发及在板料快速 冲压成形模拟中的 ...

  4. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

    应广大python学员的期盼,九宝老师精心制作的"基于python的微信公众号开发"视频教程即将上线. 该课程秉承九宝培训一贯的"简单.高效.快速"的讲课原则, ...

  5. python豆瓣电影需研究的问题_基于Python对豆瓣电影数据爬虫的设计与实现

    本文基于 Python 实现了网络 爬虫豆瓣电影模块的数据信息, 可以根据爬虫得到的信息进行相 关的市场分析,具有一定的商业 价值. 摘 要 能够高效率得完成爬取目标数据. 2 网络爬虫的实现 本 文 ...

  6. python开发微信订阅号如何申请_基于Python的微信公众平台二次开发(Python常用框架、订阅号开发、公众号开发)...

    1.1.课程的背景 微信公众平台的火热程度已经不用多言,无论是个人还是企业,政府还是商家,都已经开始搭建微信公众平台,微信的作用已经被各界人士认可.微信公众平台的技术需求市场缺口巨大.同时python ...

  7. python京东自动签到领金豆_基于Python+Appium实现京东双十一自动领金币功能

    基于Python+Appium实现京东双十一自动领金币功能 发布时间:2020-09-28 02:22:30 来源:脚本之家 阅读:87 作者:一土小亘兄 背景:做任务领金币的过程很无聊,而且每天都是 ...

  8. python用gbk编码自己的名字_基于python的汉字转GBK码

    说明: 今天想用python调用百度框计算的搜过结果,看到了URL里面的汉字用GBK编码,虽然可以直接在URL里面加入中文,之前也做过一个简体字转GBK码的python函数,但还是略嫌麻烦,今天改了一 ...

  9. python自动化框架pytest接口关联串联_基于python接口自动化框架搭建_pytest+jenkins+allure...

    本接口测试框架使用python语言实现,基于pytest测试框架,同时集成Jenkins和Allure 核心特性 封装requests请求,使用装饰器模式 详细的请求日志输出 环境与数据隔离,实现不同 ...

  10. python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

最新文章

  1. Apache地址重写的几个问题
  2. 解决Tomcat文件上传超时问题.
  3. mysql order by基于时间的盲注
  4. 01初识鸿蒙_移动通讯技术的发展
  5. chrome 开发者工具,查看元素 hover 样式
  6. 金币问题c语言程序,【求助】急请c语言高手帮忙解决程序问题(问题已经被我自己解决,金币送给自己啦)...
  7. RTX5 | 线程管理04 - 线程加入osThreadJoin
  8. 关于 async 与 await的个人理解
  9. Java垃圾回收器的工作原理
  10. 计算机如何共享手机网络热点,手机也能做热点 教你如何共享手机3G网
  11. 大道至简:企业需要的中台是什么?答案是:指挥官体系
  12. dll文件删不掉怎么办
  13. 制作一个简单的大数据看板(FineReport-帆软)
  14. Ovftool安装导出vsphere虚拟机
  15. RWD----响应式网页设计
  16. 索爱E50收款蓝牙音箱,支持各种场合的商用收账音箱
  17. Python程序员职业现状分析,想提高竞争力,就要做到这六点
  18. python 监控手机屏幕_Python 让手机实现监控功能的办法,解决一些困扰一些人很久的比如偷情的信任问题...
  19. oracle utl file grant,oracle中设置UTL_FILE_DIR参数
  20. 【查找各日期段内的银行贷款利率问题】

热门文章

  1. 类成员指针——偏移量
  2. Visual Studio / Thrift C++ 环境配置,编译安装
  3. IOS开发之Post 方式获取服务器数据
  4. 关于DLL中的哪段代码被执行的处理方法
  5. 用虚拟串口进行串口调试
  6. Panoply软件安装
  7. python_dataframe总结1
  8. MySQL 聚类合并算法_聚类算法-近邻聚类算法
  9. kubernetes集群搭建(二进制方式)
  10. SSM框架01--springmvc