首页 > 编程语言 >Python 文件处理方法详解

Python 文件处理方法详解

时间:2023-03-05 17:07:50浏览次数:42  
标签:文件 打开 Python 详解 print txt os fo


打开和关闭文件:

open 函数:打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。

语法:

file object = open(file_name [, access_mode][, buffering])
#各个参数的细节如下:
'''
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
access_mode:决定了打开文件的模式:只读,写入,追加等。这个参数是非强制的,默认文件访问模式为只读(r)。
buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。
如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
'''

不同模式打开文件的完全列表:

模式                  描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

File对象的属性:

一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:

属性                   描述
file.closed 返回true如果文件已被关闭,否则返回false。
file.mode 返回被打开文件的访问模式。
file.name 返回文件的名称。
file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。

如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fo = open("foo.txt", "wb")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace

#以上实例输出结果:
#文件名: foo.txt
#是否已关闭 : False
#访问模式 : wb
#末尾是否强制加空格 : 0

close()方法 : 刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
语法:

fileObject.close();

例子:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fo = open("./test/foo.txt", "wb")
print "文件名: ", fo.name

# 关闭打开的文件
fo.close()
#以上实例输出结果:
#文件名: foo.txt

读写文件:

使用read()和write()方法来读取和写入文件。
write()方法:将字符串写入一个打开的文件。
注意:Python字符串可以是二进制数据,而不是仅仅是文字。
write()方法不会在字符串的结尾添加换行符(‘\n’):
write只能写字符串,写入数字时,要转换格式 str(number)
语法:

fileObject.write(string);

在这里,被传递的参数是要写入到已打开文件的内容。
例子:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fo = open("foo.txt", "wb")
fo.write( "www.runoob.com!\nVery good site!\n");

# 关闭打开的文件
fo.close()

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

fileObject.writelines( [ str ])

参数
str – 要写入文件的字符串序列。
实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("test.txt", "w")
print "文件名为: ", fo.name
seq = ["菜鸟教程 1\n", "菜鸟教程 2"]
fo.writelines( seq )

# 关闭文件
fo.close()

read()方法:从一个打开的文件中读取一个字符串,文件指针移动到字符串结束位置。
语法:

fileObject.read([count]);
参数说明:
count:从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。

例子:
这里我们用到以上创建的 foo.txt 文件。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10);
print "读取的字符串是 : ", str
fo.close() # 关闭打开的文件

readline() :从文件当前指针开始读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
语法:

fileObject.readline();

参数
size – 从文件中读取的字节数。
返回值
返回从字符串中读取的字节。
实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "rw+")
print "文件名为: ", fo.name

//读取文件后,文件指针跳到下一行行首
line = fo.readline()
print "读取第一行 %s" % (line)

line = fo.readline(5)
print "读取的字符串为: %s" % (line)

# 关闭文件
fo.close()

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

fileObject.readlines( sizehint );

参数
sizehint – 从文件中读取的字节数。
返回值:
以列表的形式返回数据,文件每一行内容为一个列表元素
实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "rw+")
print "文件名为: ", fo.name

line = fo.readlines()
print "读取的数据为: %s" % (line)

line = fo.readlines(2)
print "读取的数据为: %s" % (line)


# 关闭文件
fo.close()

next() :在文件使用迭代器时会使用到,在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,
如果到达结尾(EOF),则触发 StopIteration
语法:

fileObject.next();

实例
文件 runoob.txt 的内容如下:
这是第一行
这是第二行
这是第三行
这是第四行
这是第五行
循环读取文件的内容:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "rw+")
print "文件名为: ", fo.name

for index in range(5):
#执行 fo.next() 后文件指针跳到末尾
line = fo.next()
print "第 %d 行 - %s" % (index, line)

# 关闭文件
fo.close()

以上实例输出结果为:
文件名为: runoob.txt
第 0 行 - 这是第一行

第 1 行 - 这是第二行

第 2 行 - 这是第三行

第 3 行 - 这是第四行

第 4 行 - 这是第五行

文件指针位置:

tell():方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。
seek(offset [,from]):方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。
如果它被设为2,那么该文件的末尾将作为参考位置。
例子:
就用我们上面创建的文件foo.txt。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10);
print "读取的字符串是 : ", str

# 查找文件指针当前位置
position = fo.tell();
print "当前文件位置 : ", position

# 把指针再次重新定位到文件开头
position = fo.seek(0, 0);
str = fo.read(10);
print "重新读取字符串 : ", str
# 关闭打开的文件
fo.close()

以上实例输出结果:
读取的字符串是 : www.runoob
当前文件位置 : 10
重新读取字符串 : www.runoob

文件截取:

truncate() :用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符(相当于保留整个文件文首开始的size个字符)。 如果没有指定 size,则从当前位置起截断(相当于清空文件当前文件指针后的内容);截断之后 size 后面的所有字符被删除。
语法:

fileObject.truncate( [ size ])

参数
size – 可选,如果存在则文件截断为 size 字节。
实例

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "r+")
print "文件名为: ", fo.name

line = fo.readline()
print "读取第一行: %s" % (line)

# 截断剩下的字符串
fo.truncate()

# 尝试再次读取数据
line = fo.readline()
print "读取数据: %s" % (line)

# 关闭文件
fo.close()
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "r+")
print "文件名为: ", fo.name

# 截取10个字节
fo.truncate(10)

str = fo.read()
print "读取数据: %s" % (str)

# 关闭文件
fo.close()

下面文件操作需要 os 模块配合:

重命名和删除文件:

Python的os模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。
rename():需要两个参数,当前的文件名和新文件名。
语法:

os.rename(current_file_name, new_file_name)

例子:
下例将重命名一个已经存在的文件test1.txt。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

#文件的重命名和删除需要 os 模块
import os

# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )

remove():删除文件,需要提供要删除的文件名作为参数。
语法:

os.remove(file_name)

例子:
下例将删除一个已经存在的文件test2.txt。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")

Python里的目录:

os模块有许多方法能帮你创建,删除和更改目录。
mkdir():在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。
语法:

os.mkdir("newdir")

例子:
下例将在当前目录下创建一个新目录test。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 创建目录test
os.mkdir("test")

chdir():改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。
语法:

os.chdir("newdir")

例子:
下例将进入”/home/newdir”目录。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 将当前目录改为"/home/newdir"
os.chdir("/home/newdir")

getcwd():显示当前的工作目录。
语法:

os.getcwd()

例子:
下例给出当前目录:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 给出当前的目录
os.getcwd()

rmdir():删除目录(只能删除空目录),目录名称以参数传递。

语法:

os.rmdir('dirname')

例子:
以下是删除” /tmp/test”目录的例子。目录的完全合规的名称必须被给出,否则会在当前目录下搜索该目录。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os

# 删除”/tmp/test”目录
os.rmdir( "/tmp/test" )

文件、目录相关的方法:

如下:
File 对象方法: file对象提供了操作文件的一系列方法。
OS 对象方法: 提供了处理文件及目录的一系列方法。


标签:文件,打开,Python,详解,print,txt,os,fo
From: https://blog.51cto.com/sdwml/6101498

相关文章

  • Linux crontab使用详解
    crontab执行的命令文件等都要用绝对路径文件位置:位置一般在/var/spool/cron/下,如果你是root用户,那下面有个root文件,建议日常备份,避免误删除导致crontab文件丢失;常用命令......
  • Linux shell使用详解
    shell用于解释用户输入的命令,将命令解释为二进制代码,并将结果返回到命令终端上。语法:文件:xxx.sh#!/bin/bash#comments,命令注释具体命令...具体命令执行.sh文件方式:#......
  • python操作mysql
    1、mysql查询操作:#!/usr/bin/python#-*-coding:UTF-8-*-importMySQLdb#打开数据库连接db=MySQLdb.connect("localhost","root","111111","analysis2")#使用cursor......
  • python beautifulsoup 安装教程
    linux版:pipinstallbeautifulsoup4windows版:下载beautifulsoup安装包下载地址:​​​http://www.cr173.com/soft/109251.html​​​下载解压后,将文件夹放到C:/Pyth......
  • Linux awk命令详解
    awk命令作用:文本处理输出格式化的文本报表执行算数运算执行字符串操作运行系统命令等等AWK的程序结构:BEGIN语句块BEGIN语句块的语法BEGIN{awk-commands}BEGIN语句块在程序......
  • python装饰器
    装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。装饰器用于有以下场景,比如:插......
  • 在线图书借阅网站( Python +Vue 实现)
    功能介绍平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、图书详情页、用户中心......
  • python 循环结构 for循环 输出1到100的数值
    """for循环语法:foriinrange(起点包含,终点不包含):要重复做的事情"""foriinrange(1,101):print(i)......
  • Java 类加载时机(动态、静态) 与 类加载过程 详解
    (目录)类加载动态加载和静态加载反射机制是java实现动态语言的关键,也就是通过反射实现类动态加载。静态加载:编译时加载相关的类,如果没有则报错,依赖性太强动态......
  • python 循环结构 for循环遍历列表 输出所有列表成员
    """for临时变量in列表:处理临时变量"""li=["刘备","关羽","张飞"]print("准备欢迎每个同学")fornameinli:print(name,"你好")......