Python领进门(三)I/O 输入输出 文件的读取、编辑、写入等

文件读写

IO是编程的一个重要内容,有的时候IO的重要性和难易程度甚至超过了核心算法。

IO涉及那些内容呢?
包括网页访问、爬取,与用户的交互,基本的文件读写。掌握一些基本的IO操作之后,你就可以用Python处理各种格式的数据,包括Word、Excel的编辑、读取和其它所有你能够想象得到的操作。
更加理论性的理解可以参考任何一本xx语言,从入门到放弃 精通。也可以看看廖雪峰博客:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017606916795776

基本文件读写,open函数

最简单的文件读写从文本文档开始,我们希望在当前目录下新建一个txt文件,然后写入
hello world!
hello world!
代码例子如下:

with open('./example.txt','w') as ob:
    ob.write('hello world!\nhello world!')

字符串中的\n代表换行,这是一个常用的转义字符,注意字符串中转义字符以\开头,如果希望表示\这个符号本身,在字符串中应该写成\。还是不明白什么是转义字符?打开你的spyder试一试吧!
常见的转义字符:
https://baike.baidu.com/item/转义字符/86397?fr=aladdin
然后我们打开当前目录下的example.txt文件:
在这里插入图片描述
那为什么在第一行中我们写的是‘./example.txt’,而不是‘example.txt’呢?
其实写example.txt也是可以的,前面的./代表文件的路径,.表示当前路径(…表示上一层路径),而/(注意与上文中的\区分)是用来分开不同路径层次的。比如我们希望在D盘的一个叫folder的文件夹下进行上述操作,这个文件路径就可以写成‘D:/folder/example.txt’(如果你硬要用\,可以写成‘D:\folder\example.txt’)

然后我们再尝试一下读取刚刚创建的example.txt:

ob = open('example.txt','r')#不用with as 语句的时候要记住加入close函数
lines = ob.readlines()#当文件比较大的时候可以用readline函数一行一行的读
ob.close()
print(lines)

我们可以看到variables explorer中的lines变量,文件example.txt内的内容已经被存进了名为lines的list中,其中有两个元素,分别为‘hello world\n’和’hello world’,要注意行尾的换行符也被读了进来。

Excel读取

然后我们会讲一下怎么读取Excel和Word文件(考虑到主要是写给我女朋友看)
之后的内容中,我们会专门涉及网页的IO。

在处理表格的时候,最简单的方法是将Excel另存为csv文件,然后用读取txt文件的方法对其进行处理。但是这样就失去了excel的诸多特性和好处,所以我们介绍一下excel的读写接口xlwt和xlrd

其实Microsoft自带的vba宏编写非常强大,大家也可以自学一些基础功能,也是非常好用的。

xlwt

参考资料
https://www.cnblogs.com/python-robot/p/9958352.html

xlrd

参考资料
https://www.jianshu.com/p/f2c9dff344c6

其它的一些包

http://www.python-excel.org/

Word读取

python-docx

由于python3.x移除了exceptions这个模块,所以自带的docx不能用,需要重新安装python-docx

pip install python-docx

参考资料
大部分你会用到的python的包都会有非常详细的官方说明文件,尽量去阅读这些官方说明,尽管他们很有可能是英文的。
https://python-docx.readthedocs.io/en/latest/
https://www.cnblogs.com/klb561/p/10214195.html

娱乐内容:

参考资料:
https://www.cnblogs.com/LuDuo/p/10652234.html

今天我们来看看怎么生成一张这样的图:
在这里插入图片描述
首先我们需要这样一些素材:
在这里插入图片描述
然后我们需要一段文本,并且从文本中提取词频,利用出现频率最高的词生成上面的图片。这里我们用到了Github上的一个著名项目:
狗屁不通文章生成器
我们点击上面的链接,在主题中输入“我爱你”,然后生成随机文本, 并且复制粘贴保存到一个txt文件中,然后运行脚本:

import re # 正则表达式库
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba # 结巴分词
import wordcloud # 词云展示库
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库

# 读取文件
fn = open('./mix.txt','rt', encoding='UTF-8') # 打开文件
string_data = fn.read() # 读出整个文件
fn.close() # 关闭文件

# 文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除

# 文本分词
seg_list_exact = jieba.cut(string_data, cut_all = False) # 精确模式分词
object_list = []
remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',
                u'通常',u'如果',u'我们',u'需要'] # 自定义去除词库

for word in seg_list_exact: # 循环读出每个分词
    if word not in remove_words: # 如果不在去除词库中
        object_list.append(word) # 分词追加到列表

# 词频统计
word_counts = collections.Counter(object_list) # 对分词做词频统计
word_counts_top10 = word_counts.most_common(10) # 获取前10最高频的词
print (word_counts_top10) # 输出检查

# 词频展示
mask = np.array(Image.open('./h.png')) # 定义词频背景
wc = wordcloud.WordCloud(
    font_path='C:/Users/danphnis/AppData/Local/Microsoft/Windows/Fonts/buding.ttf', # 设置字体格式
    mask=mask, # 设置背景图
    max_words=200, # 最多显示词数
    max_font_size=100 # 字体最大值
)

wc.generate_from_frequencies(word_counts) # 从字典生成词云
image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像

尝试修改这段代码中的图片途径和文本路径,生成你自己的趣图。如果想用固定的词汇,可以自己写一个dict替换掉变量word_counts即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值