- 2 mins

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

Topaz

Always keep learning.

comments powered by Disqus
rss facebook twitter github youtube mail spotify instagram linkedin google pinterest medium vimeo