3127文件操作

查IP地址:终端(功能键+R)+cmd+ipconfig

一,文件操作基本流程。

1. 打开文件,得到文件句柄并赋值给一个变量。
2. 通过句柄对文件进行操作
3. 关闭文件

参数:1,文件路径。
2,编码方式。encode。
3,执行动作(打开方式):只读,只写,追加,读写,写读....

f:变量,f_obj,file,f_handler,...文件句柄。

open windows的系统功能,windows默认编码方式:gbk,linux默认编码方式utf-8。f.close()

绝对路径:从根目录开始,一级一级查找知道找到文件。  D:护士老师主妇空姐联系方式.txt
相对路径:在同一个文件夹下,直接写文件名即可。

报错处理:
/U//UU

#'C:log.txt'
第一种:r'C:log.txt'
第二种:C:\log.txt
as.txt
f = open('D:护士老师主妇空姐联系方式.txt',encoding='utf-8',mode='r')
content = f.read()
print(content)
f.close()    #打不开的解决办法:查看格式,路径的引号,顺序。在路径前加r((r'D:护士老师主妇空姐联系方式),或者将\变为\\

二,文件编码

编码不一致时:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb7 in position 0: invalid start byte
文件以什么编码方式存储的,就以什么编码方式打开。利用之前学的编码转换

三,文件的打开模式

1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
五种方式:
    1:全部读出来f.read()
    f = open('log',encoding='utf-8')
    content = f.read()
    print(content,type(content))
    f.close()

    2:一行一行的读
    f = open('log',encoding='utf-8')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()

    3:将原文件的每一行作为一哥列表的元素。
    f = open('log',encoding='utf-8')
    print(f.readlines())
    f.close()

    4:读取一部分read(n)。
    在r模式下,read(n)按照字符去读取。
    在rb模式下,read(n)按照字节去读取。
    f = open('log',encoding='utf-8')
    print(f.read(3))
    f.close()
    f = open('log',mode='rb')
    content = f.read(4)
    print(content)
    f.close()

    5:循环读取。
    f = open('log',encoding='utf-8')
    for i in f:
        print(i.strip())
    f.close()

这种方法,占用内存极少。不会把文件所有内容写入内存,而只是每次把一行的内容写入到内存。当下一次循环时,

上一次内存的内容被覆盖。所以整个程序 执行完成,内存只保存了一行的内容。

非文字类的文件时,用rb
rb,只读,以bytes类型读取。

f = open('D:护士老师主妇空姐联系方式.txt',mode='rb')
content = f.read()
print(content)
f.close()

r+ 先读,后追加 一定要先读后写
f = open('log',encoding='utf-8',mode='r+')
content = f.read()
print(content)
f.write('aaa')
f.close()

错误的  #先写后读,随着光标的移动,文件内容会被覆盖。
f = open('log',encoding='utf-8',mode='r+')
f.write('BBB')
content = f.read()
print(content)
f.close()
写:
w
没有文件,创建一个文件写入内容
f = open('log1',encoding='utf-8',mode='w')
f.write('儿科王金发;剪短发了肯定撒就废了;就')
f.close()

有文件,将原文件内容清空,在写入内容。
f = open('log1',encoding='utf-8',mode='w')
f.write('666')
f.close()
w+ 先写后读。
f = open('log',encoding='utf-8',mode='w+')
f.write('中国')

#print(f.tell()) # .tell()按字节去读光标位置
f.seek(3) #seek(3) 按照字节调整光标位置
print(f.read())
f.close()


truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,
因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。
f = open('log',encoding='utf-8',mode='a')
f.truncate(7) # 按字节对原文件截取
f.close()

 五,文件的修改。

 文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果。

 文件修改的过程:

1,将原文件读取到内存。
2,在内存中进行修改,形成新的内容。
3,将新的字符串写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。

import os  #引入模块 os
with open('log',encoding='utf-8') as f1,
    open('log.bak',encoding='utf-8',mode='w') as f2:
    content = f1.read()
    new_content = content.replace('alex','SB')
    f2.write(new_content)
os.remove('log')  #删除旧文件
os.rename('log.bak','log')   #重命名新文件
原文地址:https://www.cnblogs.com/Mr-Murray/p/8659532.html