Python-文件处理

一、文件的操作

1、打开一个文件

语法:

open(filename,mode)

解释:

filename:代表你要访问的文件名

mode:这里代表你打开文件的模式,有 只读,写入,读写,追加等模式;默认为只读模式。

我们可以看下面的列表:

1、读模式 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式

例子:

f = open("foo.txt", "r",encoding="UTF-8")  #只读的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
i=f.read()   # 读取文件,bing 赋值给i
print(i)     #打印i
f.close()    #关闭文件夹
#输出如下:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
Python 是一个非常好的语言。
是的,的确非常好!!

2、读写模式 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。

例子:

f = open("foo.txt", "r+",encoding="UTF-8")  #读写的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
i=f.read()   # 读取文件,bing 赋值给i
print(i)     #打印i
f.write("我要学Python\n")       #写入
# f.flush()
f.close()    #关闭文件夹
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
我要学Python
我要学Python

3、写模式 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件

例子:

f = open("foo.txt", "w",encoding="UTF-8")  #写的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
f.write("我要学Python\n")       #写入,文件夹存在覆盖,不存在创建
f.close()    #关闭文件夹

4、读写模式 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件

例子:

f = open("foo.txt", "w+",encoding="UTF-8")  #写的方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
f.write("我要学Python\n")       #写入,文件夹存在覆盖,不存在创建
print("定位之前的光标位置:%s" % (f.tell()))
f.flush()                       #刷新文件使内存的内容刷新至文件夹
f.seek(0)                       #因为W+读取文件之后会定位在文件尾部,所以需要重新定位一下光标位置,要不无法读取
print("定位之后的光标位置:%s" % (f.tell()))
i = f.read()
print(i)
f.close()    #关闭文件夹
输出:
C:\Python35\python.exe D:/linux/python/all_test/listandtup.py
定位之前的光标位置:17
定位之后的光标位置:0
我要学Python

5、追加 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

例子:

f = open("foo.txt", "a",encoding="UTF-8")  #追加方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
f.write("我要学Python\n")       #写入,文件夹存在追加,不存在创建
print("定位之前的光标位置:%s" % (f.tell()))
f.seek(0)                       #因为a追加文件之后会定位在文件尾部,所以需要重新定位一下光标位置,要不无法读取
print("定位之后的光标位置:%s" % (f.tell()))
f.close()    #关闭文件夹

6、追加读 a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

例子:

f = open("foo.txt", "a+",encoding="UTF-8")  #追加读方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
f.write("我要学Python\n")       #写入,文件夹存在创建,不存在创建
print("定位之前的光标位置:%s" % (f.tell()))
f.flush()                       #刷新文件使内存的内容刷新至文件夹
f.seek(0)                       #因为W+读取文件之后会定位在文件尾部,所以需要重新定位一下光标位置,要不无法读取
print("定位之后的光标位置:%s" % (f.tell()))
i = f.read()
print(i)
f.close()    #关闭文件夹
输出:
C:\Python35\python.exe D:/linux/python/all_test/总练习.py
定位之前的光标位置:136
定位之后的光标位置:0
我要学Python
我要学Python
我要学Python
我要学Python
我要学Python

二、文件的操作方法

文件的常用方法有13种,如下图:

文件的file.close、file.flush、file.seek、file.tell在前面文件的读、写、追加已经介绍过了这里就不一一说了,下面我们说一下剩余的几种方法吧!

1、fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作

语法:

fileObject.fileno()

返回值:文件描述符

例子:

f = open("foo.txt", "a+",encoding="UTF-8")  #追加读方式打开的文件,encoding是转码的意思,告诉解释器,是以UTF-8的格式
fid = f.fileno()
print("文件的描述符为:",fid)
f.close()    #关闭文件夹
输出:
C:\Python35\python.exe D:/linux/python/all_test/总练习.py
文件的描述符为: 3

2、next() 返回文件的下一行

语法:

next(iterator[,default])

例子:
# 打开文件
fo = open("foo.txt", "r",encoding="UTF-8")
print ("文件名为: ", fo.name)
for index in range(5):
    line = next(fo)
    print ("第 %d 行 - %s" % (index, line))
# 关闭文件
fo.close()
#输出
# C:\Python35\python.exe D:/linux/python/all_test/总练习.py
# 文件名为:  foo.txt
# 第 0 行 - 我要学Python0
# 第 1 行 - 我要学Python1
# 第 2 行 - 我要学Python2
# 第 3 行 - 我要学Python3
# 第 4 行 - 我要学Python4

3、read方法:用于从文件读取指定的字节数,如果为给定或为负则读取所有

语法:

fileObject.read()

例子:

fo = open("foo.txt", "r",encoding="UTF-8")
print ("文件名为: ", fo.name)
line = fo.read()       #不指定字符节读取所有
print(line)
fo.close()    # 关闭文件
# 如下:
# C:\Python35\python.exe D:/linux/python/all_test/总练习.py
# 文件名为:  foo.txt
# 我要学Python0
# 我要学Python1
# 我要学Python2
# 我要学Python3
# 我要学Python4
# 我要学Python5

===========================================
fo = open("foo.txt", "r",encoding="UTF-8")
print ("文件名为: ", fo.name)
line = fo.read(16)       #指定读取16字节
print(line)
fo.close()    # 关闭文件
#如下:
# C:\Python35\python.exe D:/linux/python/all_test/总练习.py
# 文件名为:  foo.txt
# 我要学Python0
# 我要学Py

4、readline() 方法用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。

语法:

fileObject.readline()

例子:

fo = open("foo.txt", "r",encoding="UTF-8")
print ("文件名为: ", fo.name)
line = fo.readline(3)       #指定读取16字节
print("读取指定的字符串为:%s" % (line))
print("光标现在的位置:%s" %(fo.tell()))
fo.seek(0,0)          #之所以用这个是因为前面已经读了16个字符了所以要把光标调到0 的位置
print("调整后光标的位置:%s" %(fo.tell()))
line = fo.readline()       #读取第一行
print("读取第一行:%s" % (line))
fo.close()    # 关闭文件
#如下:
# C:\Python35\python.exe D:/linux/python/all_test/总练习.py
# 文件名为:  foo.txt
# 读取指定的字符串为:我要学
# 光标现在的位置:9
# 调整后光标的位置:0
# 读取第一行:我要学Python0

5、readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。如果碰到结束符 EOF 则返回空字符串。

语法:

fileObject.readlines()

例子:

fo = open("foo.txt", "r",encoding="UTF-8")
print ("文件名为: ", fo.name)
line = fo.readlines(3)       #指定读取3字节
print("读取指定的字符串为:%s" % (line))
for line in fo.readlines():
    line = line.strip("\n")     #使用strip去掉换行符/n
    print("读取所有行:%s" % (line))
fo.close()    # 关闭文件
输出如下:
C:\Python35\python.exe D:/linux/python/all_test/总练习.py
文件名为:  foo.txt
读取指定的字符串为:['我要学Python0\n']
读取所有行:我要学Python1
读取所有行:我要学Python2
读取所有行:我要学Python3
读取所有行:我要学Python4
读取所有行:我要学Python5
读取所有行:我要学Python6
读取所有行:我要学Python7

6、truncate() 方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则重置到当前位置。

语法:

fileObject.truncate( [ size ])
例子:
fo = open("foo.txt", "r+",encoding="UTF-8")
line = fo.readline()
print ("读取行: %s" % (line))

fo.truncate()
line = fo.readlines()
print ("读取行: %s" % (line))
fo.close()    # 关闭文件

输出:
C:\Python35\python.exe D:/linux/python/all_test/总练习.py
读取行: 我要学Python1

读取行: ['我要学Python2\n', '我要学Python3\n', '我要学Python4']

==========================================
fo = open("foo.txt", "r+",encoding="UTF-8")
fo.truncate(10)            #截取10个字符,其余的清空
line = fo.read()
print ("读取的数据: %s" % (line))
fo.close()    # 关闭文件

输出如下:
C:\Python35\python.exe D:/linux/python/all_test/总练习.py
读取的数据: 我要学P

7、writelines() 方法用于向文件中写入一序列的字符串,这一序列字符串可以是由迭代对象产生的,如一个字符串列表,换行需要制定换行符 \n。

语法

writelines() 方法语法如下:

fileObject.writelines( [ str ])
例子:
fo = open("foo.txt", "a+",encoding="UTF-8")
seq = ["我要学Python 1\n", "我要学Python 2"]
fo.writelines( seq )
fo.flush()
fo.seek(0,0)                                            #跳到行首
line = fo.readlines()                                 #读取所有行
print ("读取的数据: %s" % (line))
fo.close()    # 关闭文件

输出:
C:\Python35\python.exe D:/linux/python/all_test/总练习.py
读取的数据: ['我要学Python 1\n', '我要学Python 2']

OK,file的基本操作,就结束了,睡觉了。

 

 

posted @ 2017-01-24 00:19  牛逼点的名字  阅读(6258)  评论(0编辑  收藏  举报