Python:文件操作

Python:文件操作

open()调用的内置函数,内置函数调用的系统内部的open,一切对文件进行的操作都是基于文件句柄f1.

文件操作的步骤:

打开文件 -> 操作文件 -> 关闭文件

切记:最后要关闭文件(否则可能会有意想不到的结果)

win的操作系统安装时是默认的gbk编码,而linux操作系统默认的是utf8编码;

打开文件

文件句柄 = open('文件路径',encoding='指定文件编码', mode='模式')

f1 = open(r'd:/联系方式.txt', encoding='gbk', mode='r')    #指定绝对路径
print(f1.read())
f1.close()

f1 = open('log1', encoding='gbk', mode='r')               #相对路径是在该py文件同级目录下
print(f1.read())
f1.close()

 

为了防止忘记关闭文件,可以使用上下文管理器来打开文件

with open('文件路径','模式') as 文件句柄:

with open('log1', encoding='utf-8') as f1,\
    open('log2', encoding='utf-8', mode='w') as f2:
    content = f1.read()
    f2.write(content)

with open('log1', encoding='utf-8') as f1:
    print(f1.read())
    f1.close()
    pass
    with open('log1', encoding='utf-8',mode='w') as f2:
        f2.write('666')

 

打开文件的模式有:

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

a,追加模式。【可读; 不存在则创建;存在则只追加内容;】

r+,可读写文件。【可读;可写;可追加】

w+,写读


"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU

r+U


"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

 

关闭文件

文件句柄.close()

 

文件:读

#读 r
#
1 read() 全读出来 f1 = open('log1', encoding='utf-8') content = f1.read() print(content) f1.close() #2 read(n) 读一部分 f1 = open('log1', encoding='utf-8') content = f1.read(3) print(content) f1.close() f1 = open('log1', mode='rb') print(f1.read(3).decode('utf-8')) f1.close() # r 模式 read(n) n 按照字符读取。 # rb 模式 read(n) n 按照字节读取。 #3 readline() 按行读取 f1 = open('log1', encoding='utf-8') print(f1.readline()) print(f1.readline()) print(f1.readline()) f1.close() #4 readlines() 依次读取每行  f1 = open('log1', encoding='utf-8') print(f1.readlines()) f1.close() # 5 for 循环 f1 = open('log1', encoding='utf-8') for line in f1: print(line) f1.close()

 

# r+ 读写  先读后写
f1 = open('log1', encoding='utf-8', mode='r+')
print(f1.read())f1.write('666')
f1.write('a')
print(f1.read())
f1.close()

 

文件:写

# w 没有文件,新建文件写入内容
# 有原文件,先清空内容,在写入新内容。
f1 = open('log2', encoding='utf-8', mode='w')
f1.write('桃白白fdksagdfsa')
f1.close()

# 图片的读取及写入
f1 = open('1.jpg', mode='rb')
content = f1.read()

f2 = open('2.jpg', mode='wb')
f2.write(content)
f1.close()
f2.close()

# w+ 先写后读
f1 = open('log2', encoding='utf-8', mode='w+')
f1.write('两款发动机了')
f1.seek(0)
print(f1.read())
f1.close()

# 追加 a
#  a 没有文件,新建文件写入内容
f1 = open('log3', encoding='utf-8', mode='a')
# f1.write('alex 666')
f1.write('\nalex 666')
f1.close()

# a+
f1 = open('log3', encoding='utf-8', mode='a+')
f1.write('python22期')
f1.seek(0)
print(f1.read())
f1.close()

 

文件:改

操作步骤如下:

# 1,以读模式打开原文件。
# 2,以写的模式打开一个新文件。
# 3,将原文件读出按照要求修改将修改后的内容写入新文件。
# 4,删除原文件。
# 5,将新文件重命名原文件。

import os
with open('file', encoding='utf-8') as f1,\
    open('file.bak', encoding='utf-8', mode='w') as f2:
    old_content = f1.read()
    new_content = old_content.replace('alex', 'SB')
    f2.write(new_content)

os.remove('file')
os.rename('file.bak', 'file')

升级版本
import os
with open('file', encoding='utf-8') as f1,\
    open('file.bak', encoding='utf-8', mode='w') as f2:
    for line in f1:
        new_line = line.replace('SB','alex')
        f2.write(new_line)

os.remove('file')
os.rename('file.bak', 'file')

 

 其他操作:

# readable 是否可读
# writable 是否可写
# f1.seek(12)     #任意调整
# f1.seek(0,2)    #光标调整到最后
# f1.seek(0)      #光标调整到开头
# f1.tell()       #告诉光标的位置
# f1.truncate(3)  #按照字节对原文件进行截取 必须在a 或 a+ 模式

f1 = open('log3', encoding='utf-8', mode='a+')
# f1.write('python22期')
# print(f1.read())
print(f1.readable())
print(f1.writable())
f1.close()


f1 = open('log2', encoding='utf-8')
f1.read()
print(f1.tell())
print(f1.seek(0))
print(f1.seek(0,2))
f1.seek(12)           #任意调整
f1.seek(0,2)        #光标调整到最后
f1.seek(0)         #光标调整到开头
print(f1.tell())     #告诉光标的位置
f1.close()


f1 = open('log3', encoding='utf-8', mode='a+')
f1.truncate(3)       #按照字节对原文件进行截取 必须在a 或 a+ 模式
f1.close()

 

posted @ 2018-05-24 20:43  白鹭洲  阅读(173)  评论(0编辑  收藏  举报