python之旅--文件操作

文件操作

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

文件:file

夜空中最亮的星 能否知道
曾与我同行的身影 如今在哪里
夜空中最亮的星 能否在意
是等太阳升起 还是意外先来临
我宁愿所有痛苦都留在心里
也不愿忘记你的眼睛
给我再去相信的勇气
越过谎言去拥抱你
每当我找不到存在的意义
每当我迷失在黑夜里
黑夜中最亮的星 请照亮我前行
我祈祷拥有一颗透明的心灵
和会流泪的眼睛
给我再去相信的勇气
越过谎言去拥抱你
每当我找不到存在的意义
每当我迷失在黑夜里
黑夜中最亮的星 请照亮我前行
夜空中最亮的星 能否听清
那仰望的人 心底的孤独和叹息
View Code

操作示例;

data = open("night_sky",encoding="utf-8").read() #打开文件 默认是gbk,需要用utf8
print(data)
#打开的文件对象赋一个变量
# r读模式
f = open("night_sky",'r',encoding='utf-8') #赋给f一个内存对象,一个句柄 文件名大小内存地址
data1 = f.read()
data2 = f.read()
print(data1) #读完所有的行 光标在最后面
print('--data2--') #data2没有打印数据
f.close()
#写write 不能读 覆盖原来的文件
f = open("night_sky",'w',encoding='utf-8')
f.write("夜空中的星 \n")
f.write("上海 \n")
f.close()
#追加 append 不能读 不覆盖原来的文件
f = open("night_sky",'a',encoding='utf-8')
f.write("夜空中的星 \n")
f.write("上海 \n")
f.close()
f = open("night_sky",'r',encoding="utf-8")
#打印文件前五行
for i in range(5): #循环五次
    print(f.readline()) #一行一行的读
#打印整个文件
#f.readlines() 只适合读小文件
print(f.readlines()) #f.readlines 是一个列表
for line in f.readlines():
    print(line.strip())
#第十行不打印
for index,line in enumerate(f.readlines()):
    if index == 9:
        print("--分割线--")
        continue
    print(line.strip()) #strip去掉空格和换行
#循环一行删除一行 内存中只保存一条数据
count = 0 #加一个计数器可以实现不打印指定的行
for line in f: #f变成了一个迭代器
    if count == 9:
        print("--分割线--")
        count += 1
        continue
    print(line)
    count += 1
f.close() 
f = open("night_sky",'r',encoding="utf-8")
print(f.tell()) #打印光标当前位置 0
print(f.readline().strip())
print(f.tell()) #字符的位置
f.seek(10) #回到指定地方
print(f.tell())
print(f.encoding) #当前字符集
print(f.fileno()) #返回一个编号
print(f.readable()) #判断文件是否可读
print(f.writable()) #判断文件是否可写
f.close()
#print(f.flush()) 缓存写到硬盘里
f = open("night_sky01",'w',encoding="utf-8")
f.write("hello world")
f.flush() #刷新到硬盘中
f.close()
f = open("night_sky01",'a',encoding="utf-8")
f.truncate() #清空文件
f.truncate(10) #从开始截取10个
#f.flush()程序练习 进度条模拟
import sys,time
for i in range(50):
    sys.stdout.write("#")
    sys.stdout.flush() #刷新
    time.sleep(0.1) #写入一次暂停0.1s
#r+ 读写 以读和追加的模式
f = open("night_sky",'r+',encoding="utf-8")
print(f.readline())
print(f.readline())
f.write("-->python") #写的文件追加到最后面的行了
print(f.readline())
f.close()
#w+ 写读
f = open("night_sky",'w+',encoding="utf-8") #创建一个文件
f.write("-->hello") 
print(f.readline())
f.seek()
f.write("-->python") #还是追加到后面
print(f.readline())
f.close()
#rb 二进制文件读
f = open("night_sky",'rb') #二进制不需要声明字符编码  
print(f.readline()) #网络传输用二进制
f.close()
#wb 二进制文件写
f = open("night_sky",'wb')
f.write("hello \n".encode()) #需要编码为二进制
f.close()

#文件修改
#方法一全部加载到内存中进行修改,像vim
#打开一个文件修改后,写入一个新文件
f = open("night_sky",'r',encoding="utf-8")
f_new = open("night_sky_new",'w',encoding="utf-8")
for line in f:
    if "夜空中最亮的星" in line:
        line = line.replace("夜空中最亮的星","The brightest star in the night sky ")
    f_new.write(line)
f.close()
f_new.close()

#传递参数修改文件
f = open("night_sky",'r',encoding="utf-8")
f_new = open("night_sky_new",'w',encoding="utf-8")
find_str = input("输入修改的内容:")
rep_str = input("输入替换成的内容:")
for line in f:
    if find_str in line:
        line = line.replace(find_str,rep_str)
    f_new.write(line)
f.close()
f_new.close()
with语句
1  为了避免打开文件后忘记关闭,可以通过管理上下文
2  当with执行完毕后,会自动关闭并释放文件资源
with open("night_sky",'r',encoding="utf-8") as f:
    print(f.readline())
    #循环
    for line in f:
        print(line.strip())

#可以同时打开多个文件
with open("file1") as object1,open("file2") as object2:
    pass

#官方建议一行代码不超过80个字符
with open("file1") as object1,\
        open("file2") as object2:
    pass

猜你喜欢

转载自www.cnblogs.com/wangzihong/p/9069770.html