python笔记006-文件操作

1文件操作... 1

1.1打开和关闭文件... 1

1.1.2 open函数... 1

1.2 文件 File对象的属性... 1

1.2.1 属性... 1

1.2.2 方法... 2

1.2.3 mode=’xx’属性详情... 4

1.3 OS操作文件... 6

1文件操作

1.1打开和关闭文件

1.1.2 open函数

     file = open(file_name [,mode][,buffering]

eg:file = open(“test.txt”,mode = ‘r’,encoding = ‘utf-8’)

参数详情:

     file_name : 文件名

     mode:这个参数非强制选择,默认 只读(r),详情请见:

https://www.runoob.com/python/python-files-io.html

     encoding :文件的编码方式

打开文件的方式

注意点:f.close() 最后一定要写,关闭文件,关闭后不可以在读

1.2 文件 File对象的属性

1.2.1 属性

     file = open(‘a.txt’, mode = ‘r’ , encoding = ‘utf-8’)

     file.close 文件关闭返回 true ,否则返回 false

     file.name 返回文件名称

     flie.mode 返回被打开文件的访问模式

1.2.2 方法

注意点:写完一定要刷新,并且一定要关闭

①   write() 方法:

     write() 方法可以将任何字符串写入一个打开的文件。注意点:Python字符中可以是二进制数据,而不仅仅是文字。

    write() 方法不会在字符串的结尾自动添加换行符(‘\n’)

def test3():
    f = open("day008/day_008_txt1",mode='w',encoding="utf-8")
    f.write('孟子三迁,孟轲(孟子)的母亲为了选择良好的\n教育环境,多次迁居')
    #文件中 "\n" 的作用是换行,write()方法不会自动换行
    f.flush()  #刷新缓冲区
    #result = f.read() #这句错误,不能读,因为 mode='w',只读模式
    f.close()  #关闭文件
test3()

②   read() 方法:从一个打开的文件中读取一个字符串

def test1():    # 读操作
    f = open('day008/day_008_txt' , mode = 'r',encoding='utf-8')
    result = f.read()
    print(result)
    f.close() # 一定要记得写close,并且写到最后面
test1()

 

     read(n) 读取 n 个字符,如果文件没有关闭,在读取,不会读,而是在上次光标所在处开始读。其实,看见带‘b’的,都是处理的非文本。(包含下面)

     注意:在文本模式下,用“r”和“w”模式,不用编码和解码。但是在非文本文件下,比如视频、音乐等、用‘wb’和‘rb’,因为

用‘w’和‘r’是操作不了的。其实,

③   close() 方法:

     File对象的 close() 方法刷新缓冲区里任何还没写入的信息,并且关闭文件,关闭后就不能再进行写入。

④   seek() 方法:用于移动文件读取指针到指定位置,也就是光标

语法:file.seek(offset[,whence])

      offset :开始的偏移量

      whence :可选,默认值为0 。 表示要从哪个位置开始偏移;0代表开头,1代表当前位置,2代表文件末尾

⑤   tell() :获取光标当前位置

file.tell() 方法返回文件当前位置,即文件指针当前位置。

day008/day_008_1.txt文件内容
秦时明月汉时关,
万里长征人未还。
但使龙城飞将在,
不教胡马度阴山。
def test13():
    f = open('day008/day_008_1.txt',mode='r',encoding='utf-8')
    print(f.name)#文件名
    line = f.readline()#读取文件中的一行数据
    print('读取的数据为:%s'%(line))

    #获取当前文件位置
    path = f.tell()
    print('当前位置:%d'%path)
    f.close()#关闭文件
test13()

结果:

 

⑥   truncate() :截断文件

file.truncate( [size]) 方法用于截断文件,如果有可选参数size,则表示截断文件为size个字符。如果没有指定size,则从当前位置起截断;截断之后size后面的所有字符被删除。

注意点:deeping-bug:在r+ 模式下,如果读取了内容,不论读取内容的多少,光标显示的多少。再写入文件或操作文件时都是在结尾进行。

1.2.3 mode=’xx’属性详情

t

 

文本模式 (默认)。

x

 

写模式,新建一个文件,如果该文件已存在则会报错。

b

 

二进制模式。

+

 

打开一个文件进行更新(可读可写)。

U

 

通用换行模式(不推荐)。

r

 

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

rb

 

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。

r+

 

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

 

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。

w

 

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb

 

以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

w+

 

打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+

 

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

a

 

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

ab

 

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

a+

 

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

ab+

 

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 

1)     a 或 ab :

def test4():    # a或ab 用于文件的追加,把新内容加到已有内容后面
    f = open("day008/day_008_txt1", mode='a', encoding="utf-8")
    f.write("'《三字经》:'昔孟母,择邻处'")
    f.flush()
    f.close()



def test5():    # w + 写读 (不常用) 直接覆盖
    f = open("day008/day_008_txt1", mode='w+', encoding="utf-8")
    f.write("")
    f.flush()
    f.close()


def test6():    # a+ 追加读
    # a+ 先写后读和先读后写都是获取不到内容的,不覆盖
    f = open("day008/day_008_txt1", mode='a+', encoding="utf-8")
    f.write("学习学习")
    print(f.read())
    f.flush()
    f.close()

1.3 OS操作文件

     文件修改:将老文件中内容读取到内存中 à修改à删除老文件à新文件名替换老文件名

     弊端:内存容易溢出。解决办法:一行一行的读,一行一行的改

     for line in file

 1 import os
 2 #方法一
 3 def test10():
 4     #打开文件,创建新文件
 5     with open("day008/day_008_1.txt",mode='r',encoding='utf-8') as f1,\
 6         open("day008/day_008_1_new.txt",mode='w',encoding='utf-8') as f2:
 7 
 8         content = f1.read()
 9         new_content = content.replace('飞将','李广') # 替换内容
10         f2.write(new_content)   # 写到 f2 中
11     os.remove('day008/day_008_1.txt') #删除原文件
12     os.rename('day008/day_008_1_new.txt','一生未封侯.txt') #
13 
14 # 方法二
15 def test11():
16     f1 = open("day008/day_008_1.txt", mode='r', encoding='utf-8')
17     f2 = open("day008/day_008_1_new.txt", mode='w', encoding='utf-8')
18     for line in f1: #一行一行取
19         new_line = line.replace('李广','飞将')
20         f2.write(new_line)
21     os.remove('day008/day_008_1.txt')
22     os.rename('day008/day_008_1_new','李广特点守')
23     f2.flush()
练习题

 

  Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是非常重要。它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows中运行。

下面是os模块中常用的模块:

 1 #os模块中比较常用的方法:
 2 import os
 3 def test12():
 4     print('01 ',os.sep) #可以取代操作系统特定的路径分隔符。windows下为'\'
 5     print('02 ',os.name) # 字符串指示你正在使用的平台。如Windows,它是'nt',linux/unix用户,它是'posix'
 6     print('03 ',os.getcwd()) #当前工作目录,即当前Python脚本工作目录路径
 7     print('04 ',os.putenv('username','username/')) #设置一个环境变量
 8     print('05 ',os.environ['username']) #获取环境变量
 9     print('06 ',os.listdir('E:\PythonWork\python1\day008')) #返回指定目录下的所有文件和目录名
10     print('07 ',os.curdir) #返回当前目录 ('.')
11     # print(os.remove('E:\PythonWork\python1\day008\008测试')) #删除一个文件
12     # print(os.system(command)) # 用来运行shell命令
13     # print(os.linesep) #给出当前平台使用的行终止符。Windows是'\r\n',linux是'\n',Mac是'\r'
14     # print(os.chdir(path)) #改变工作目录到path
15 test12()

 

运行截图:

 

os.path 常用的方法:

 1 #os.path中常用方法:
 2 import os
 3 def test13():
 4     print('01.',os.path.isfile('E:\PythonWork\python1\day008\day_008_文件操作.py'))
 5     # 检验给出的路径是不是一个文件  返回值 True False
 6 
 7     print('02.',os.path.isdir('E:\PythonWork\python1\day008'))
 8    # 检验给出的路径是不是一个目录  返回值 True False
 9 
10     print('03.',os.path.exists('E:\PythonWork'))
11     #检验给出的路径是否真的存在
12 
13     print('04.',os.path.getsize('E:\PythonWork'))
14     #获取文件大小
15 
16     print('05.',os.path.abspath('day_008_文件操作.py'))
17     #获取文件绝对路径
18 
19     print('06.',os.path.normcase('E:\PythonWork\python1\day008\day_008_文件操作.py'))
20     #规范路径字符串形式
21 
22     print('07.',os.path.split('E:\PythonWork\python1\day008\day_008_文件操作.py'))
23     #把路径分割成目录和文件名,以元组返回
24 
25     print('08.',os.path.splitext('E:\PythonWork\python1\day008\day_008_文件操作.py'))
26     #分离文件名和拓展名
27 
28     print('09.',os.path.join('E:\PythonWork\python1\day008','day_008_文件操作.py'))
29     #使用'\\'连接目录与文件名,或连接目录与目录
30 
31     print('10.',os.path.basename('E:\PythonWork\python1\day008\day_008_文件操作.py'))
32     #返回文件名
33 
34     print('11.',os.path.dirname('E:\PythonWork\python1\day008\day_008_文件操作.py'))
35     # 返回文件路径
36 test13()

运行截图:

 

参考文档:https://www.cnblogs.com/mufenglin/p/7676160.html

转载于:https://www.cnblogs.com/oito/p/11215160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值