Python 学习笔记 02
Table of Contents
Python 基本 IO 操作
输出操作
>>> print "hello"
输出:
>>> hello
输入操作
Python提供了input() 和 raw_input() 两个内置函数从标准输入读入一行文本,这两个函数基本类似,但 input 可以接收一个 Python表达式作为标准输入。开心的是 Python3.x版本中 raw_input()和 input()进行了整合,去除了raw_input(),仅保留了input()函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型,我用的是3.x版本,所以这里只介绍input函数。
user = input("name >>>")
print('user',user)
输出:
name >>>topaz
user topaz
读文件
读取方式一
f = open('1.log') #打开模式为默认的只读模式‘r’
line = f.read() #读取文件全部内容
print(line) #输出时在最后会多出一行,read()函数到达文件末会返回一个空字符,显示出空字符就是一个空行
f.close()
读取方式二
使用 with 方式打开文件,完成文件操作后文件会自动关闭,无需调用close(),推荐使用,下面的内容打开文件都使用with
with open('1.log') as f:
line = f.read()
print(line)
逐行读取文件
with open('1.log') as f:
for line in f:
print(line.rstrip()) #rstrip方法去掉每行末尾的换行符
上述代码相当于第一次读取完后关闭该文件又重新打开进行读取,可以用readline()函数进行逐行读取
with open('1.log') as f:
line1 = f.readline()
line2 = f.readline()
print(line1.rstrip())
print(line2.rstrip())
一次性读取全部数据
with open('1.log') as f:
lines = f.readlines() #读取文本中所有内容,并保存在列表里,列表中每一个元素对应一行数据
for line in lines:
print(line.rstrip())
写文件
文件打开方式
学习写文件前,先来了解下文件的打开方式
- r,只读模式(默认)。
- w,只写模式。不可读;不存在则创建;存在则删除内容
- a,追加模式。不可读;不存在则创建;存在则只追加内容
- "+" 同时读写某个文件
r+:读写文件(可读,可写,可追加)
w+:写读
a+:读写文件(可读,可写,可追加)
- "U"表示在读取时,与 r 或 r+ 一起使用,可以将 \r \n \r\n自动转换成 \n
rU
r+U
- "b"表示处理二进制文件(Linux可忽略,Windows处理二进制文件时需标注如,比如FTP发送上传ISO镜像文件)
rb
wb
ab
Demo
###r,只读模式(默认)
with open('1.log') as f:
lines = f.readlines() #读取文本中所有内容,并保存在列表里,列表中每一个元素对应一行数据
for line in lines:
print(line.rstrip())
f.write('hello')
输出:
1.hello
2.报错:io.UnsupportedOperation: not writable
###w,只写模式。不可读;不存在则创建;存在则删除内容
with open('1.log','w') as f:
lines = f.readlines() #读取文本中所有内容,并保存在列表里,列表中每一个元素对应一行数据
f.write('cat')
for line in lines:
print(line.rstrip())
输出:
1.“1.log”内容替换成cat
2.报错:io.UnsupportedOperation: not readable
### a,追加模式。可读;不存在则创建;存在则只追加内容
with open('1.log','a') as f:
f.write('dog')
lines = f.readlines() #读取文本中所有内容,并保存在列表里,列表中每一个元素对应一行数据
for line in lines:
print(line.rstrip())
输出:
1.catdog
2.报错:io.UnsupportedOperation: not readable
### r+,可读,可写,可追加
with open('1.log','r+') as f:
f.write('\ndog')
lines = f.readlines()
for line in lines:
print(line.rstrip())
字符编码
Python 2.x 版本
- py2里默认编码是ascii
- 文件开头那个编码声明是告诉解释这个代码的程序以什么编码格式,把这段代码读入到内存,因为到了内存里,这段代码其实是以bytes二进制格式存的,不过即使是2进制流,也可以按不同的编码格式转成2进制流。
- 如果在文件头声明了#_*_coding:utf-8*_,就可以写中文了,不声明的话,python在处理这段代码时按ascii,显然会出错, 加了这个声明后,里面的代码就全是utf-8格式了
- 在有#_*_coding:utf-8*_的情况下,你在声明变量如果写成name=u"大保健",那这个字符就是unicode格式,不加这个u,那你声明的字符串就是utf-8格式
- utf-8 to gbk怎么转,utf8先decode成unicode,再encode成gbk
Python 3.x 版本
- py3里默认文件编码就是utf-8,所以可以直接写中文,也不需要文件头声明编码了
- 你声明的变量默认是unicode编码,不是utf-8, 因为默认即是unicode了(不像在py2里,你想直接声明成unicode还得在变量前加个u), 此时你想转成gbk的话,直接your_str.encode("gbk")即可以
- 在py3里,str and bytes做了明确的区分,你在your_str.encode("gbk")时,encode的数据变成了bytes
- 编码应用比较多的场景应该是爬虫了,互联网上很多网站用的编码格式很杂,虽然整体趋向都变成utf-8,但现在还是很杂,所以爬网页时就需要你进行各种编码的转换,不过生活正在变美好,期待一个不需要转码的世界。
Demo
import sys
print(sys.getdefaultencoding())
msg = "我爱北京天安门"
#msg_gb2312 = msg.decode("utf-8").encode("gb2312")
msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
gb2312_to_unicode = msg_gb2312.decode("gb2312")
gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")
print(msg)
print(msg_gb2312)
print(gb2312_to_unicode)
print(gb2312_to_utf8)