一、文件的使用
文件的打开模式
打开模式 | 含义 |
r | 只读模式,如果文件不存在则返回异常 |
w | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
x | 创建写模式,文件不存在则创建,存在则返回异常 |
a | 追加写模式,文件不存在则创建,存在则在源文件的最后追加内容 |
b | 二进制文件格式 |
t | 文本文件模式,默认值 |
+ | 与r/w/x/a一起使用,在原功能上增加同时读写功能 |
在Python语言中,负责文件操作的称为文件对象,文件对象不仅可以访问存储在磁盘中的文件,也可以访问网络文件。
文件对象通过open函数得到,获取文件对象后,就可以使用文件对象提供的方法来读写文件。
open()打开函数
open函数的基本语法如下:
open(name[, mode[, buffering]])
参数说明:
- name : 一个包含了你要访问的文件名称的字符串值。
- mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
需要注意的问题
1.XXX.py文件需要与XXX.txt文件保存到同一个根目录下。当一个需要打开的文件名称不带路径时,open函数会在Python程序运行的当前目录寻找该文件,在当前目录下如果没有找到该文件,open函数抛出异常IOError。
2.在运行过程中出现‘gbk’codec can't decode byte……的错误代码
解决方案::A-另存txt文件覆盖到原目录,以utf-8的格式进行保存。B-在file-setting-code style-file encodings中改文件格式为utf-8,其中BOM为:with no BOM。C-将open代码修改为如下所示:(即:增加一个encoding的代码来修改保存格式)
f=open("a.txt","rt",encoding='utf-8')
file 对象方法
- file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。
- file.readline():返回一行。
- file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
- for line in f: print line :通过迭代器访问。
- f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。
- f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。
- f.seek(偏移量,[起始位置]):用来移动文件指针。
- 偏移量: 单位为字节,可正可负
- 起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
- f.close() 关闭文件
文件读取方法
方法 | 含义 |
f.read(size=-1) | 从文件中读取整个文件内容。读入前size长度的字符串或者字节流 |
f.readline(size=-1) | 从文件中读入一行内容。line-行数 for row in XX: for item in row: <对第row行的第item列元素进行处理> |
f.readlines(hint=-1) | line多加了一个s,代表从文件中读取所有的行,并且以每行的元素组成一个列表。 参数可选,如果给出,读入hint行。 |
f.seek(offset) | 每次print()读取完f.read()后,读取指针会在文件的末尾,再次调用f.read的相关函数已经无法从当前位置读取任何内容。 f.seek(offset)就是改变读取指针的位置,f.seek(0)将读取指针移动到文件的开头,f.seek(2)将移动到文件结尾。 |
在D:\下建立一个新的txt文件,内容为:’ABCDEFG‘
1 f=open("D:/test.txt","r")
2 s=f.read()
3 print(s)
4 ABCDEFG
5 f.seek(0)
6 Is=f.readlines()
7 print(Is)
8 ['ABCDEFG']
9 f.close()
文件写入方法
方法 | 含义 |
f.write(s) | 向文件写入一个字符串或者字节流 |
f.writelines(lines) | 将一个元素为字符串的列表整体写入文件 |
二、数据组织的维度
一维数据:线性特点
二维数据:表格特点
高维数据:HTML、XML、JSON等具体数据组织的语法结构
三、一维数据的处理
CSV:用逗号分隔的储存格式
下列要用到的函数源代码:strip();split();join();
strip():
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
str.strip([chars]);
参数
- chars -- 移除字符串头尾指定的字符序列。
返回值
返回移除字符串头尾指定的字符序列生成的新字符串。
实例
以下实例展示了 strip() 函数的使用方法:
实例(Python 3.0+)
1 str = "*****this is **string** example....wow!!!*****"
2 print (str.strip( '*' )) # 指定字符串 *
以上实例输出结果如下:
1 this is **string** example....wow!!!
从结果上看,可以注意到中间部分的字符并未删除。
以上下例演示了只要头尾包含有指定字符序列中的字符就删除:
实例(Python 3.0+)
1 str = "123abcrunoob321"
2 print (str.strip( '12' )) # 字符序列为 12
以上实例输出结果如下:
1 3abcrunoob3
split():
split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。
1 str = "this is string example....wow!!!"
2 print (str.split( )) # 以空格为分隔符
3 print (str.split('i',1)) # 以 i 为分隔符
4 print (str.split('w')) # 以 w 为分隔符
以上实例输出结果如下:
1 ['this', 'is', 'string', 'example....wow!!!']
2 ['th', 's is string example....wow!!!']
3 ['this is string example....', 'o', '!!!']
join():
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
1 s1 = "-"
2 s2 = ""
3 seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
4 print (s1.join( seq ))
5 print (s2.join( seq ))
以上实例输出结果如下:
1 r-u-n-o-o-b
2 runoob
四、二维数据的处理
二维数据存储为csv格式,需要将二维列表对象写入csv格式文件以及将csv格式读入成二维列表对象。
二维列表对象输出为csv格式文件方法如下(采用遍历循环和字符串的join()方法相结合)
#Is代表二维列表,此处省略
f=open('cpi.csv',"w")
for row in Is:#在Is的每一行里进行循环遍历
f.write(','.join(row)+'\n')#在Is列表里的每一行末尾加上换行操作
f.close()
二维数据的处理
f=open("cpi.csv","r")
Is=[]
for line in f:
Is.append(line.strip("\n").split(","))
f.close()
print(Is)
.append()函数:
append() 方法用于在列表末尾添加新的对象
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)
结果:
更新后的列表 : ['Google', 'Runoob', 'Taobao', 'Baidu']