一、文件的使用

python buffer 结构体 python buffer对象_数据

 

 

 

文件的打开模式

打开模式

含义

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']