码迷,mamicode.com
首页 > 其他好文 > 详细

文件操作

时间:2019-03-27 21:07:06      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:处理   mp4   event   div   decode   路径   png   操作系统   开始   

计算机文件:硬盘中一块储存空间(虚拟的文件)

文件操作:根据文件名来操作硬盘的那块存储空间,操作方式为 读read,写write

文件的模式:

r: 读
w: 写(无创建,有清空)
a: 追加(有创建的功能)

t: 文本操作(默认模式) r=>rt w=>wt a=>at
b: 非文本文件必须采用二进制模式来处理
+: 可读可写
r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写

 

使用文件的三大步骤:
1,打开文件
2,操作文件
3,关闭文件(*****)

1、打开文件
变量名 = 文件空间
文件路径 操作模式(读|写) 编码
f = open(‘a.txt‘, ‘r‘, encoding=‘utf-8‘)

2、操作文件

data = f.read(3)      # 将所有内容读取出来,如果设置读取长度,按照规定长度读取数据
print(data)

读取文件的方法(r):

技术图片
一次读取一行
line = f.readline()
print(line)
line = f.readline()
print(line)

按行一次性全部读出
lines = f.readlines()
print(lines)

逐步一行一行读取
l = []
for line in f:
    print(line)
      l.append(line)
  print(l)

  s = set()
  for line in f:
      # print(line)
      s.add(line)
  print(s)
View Code

3、关闭文件
f.close()     # 释放操作系统对文件的持有,变量f还被应用程序持有

 基础写(w)
文件不存在:会新建文件,再操作文件
文件存在:先清空文件,再操作文件
w = open(‘b.txt‘, ‘w‘, encoding=‘utf-8‘)
w.write(‘456‘)
w.close()

w.flush()把内存文件刷入硬盘         #在写入大量数据,要及时处理内存空间不然内存可能溢出导致数据丢失
w.close()       #1;把内存的数据刷新到硬盘中 2;释放文件资源

完成文本复制

技术图片
r = open(1.txt, r, encoding=utf-8)
w = open(11.txt, w, encoding=utf-8)
for line in r:  # 遍历就是一行一行读 取读文件的流
    w.write(line)
    w.flush()
w.close()
r.close()
View Code

 

借助读写,完成追加

技术图片
 with open(1.txt, rt, encoding=utf-8) as f1:
     data = f1.read()
     data += 666
 with open(1.txt, wt, encoding=utf-8) as f2:
     f2.write(data)
View Code

模式a:

 a为写模式,在原数据后追加写入新数据
with open(‘1.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
f.write(‘777‘)

with 打开文件: 

with open(‘1.txt‘, ‘rt‘, encoding=‘utf-8‘)  as f:
 f.read()

whith  完成文本复制

先读后写

技术图片
with open(source.txt, r, encoding=utf-8) as f1,     open(target.txt, a, encoding=utf-8) as f2:
    # 读取一个字节,如果是行/文件等结束标识,就返回该标识,否则返回None
    print(f1.newlines)

    first_data = f1.read(9)
    f2.write(first_data)
    f2.flush()

    print(f1.newlines)

    second_data = f1.readline()
    f2.write(second_data)
    f2.flush()

    last_data = f1.read()
    f2.write(last_data)
    f2.flush()

    print(f1.newlines)
    data = f1.read()
    print(data)
View Code

边读边写赋值

技术图片
with open(source.txt, r, encoding=utf-8) as f1:
    with open(target.txt, a+, encoding=utf-8) as f2:
        for line in f1:
            f2.write(line)
View Code

非文本文件复制

with open(333.mp4, rb) as f1:
    with open(666.mp4, wb+) as f2:
        for line in f1:
            f2.write(line)

x:写模式,创建文件,如果文件以存在,就抛异常
with open(‘000.txt‘, ‘x‘, encoding=‘utf-8‘) as f:
  pass

方法:seek(偏移量, 偏移位置)
偏移量:移动的字节数,负数是结合模式1,2往前偏移
偏移位置:
-- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
b‘你好1234567890‘

# 游标读
with open(‘source.txt‘, ‘rb‘) as f:
d1 = f.read(11)
print(d1)
# print(d1.decode(‘utf-8‘))

# 当前游标的位置
print(f.tell())

# 游标操作 - 从末尾位置开始
f.seek(-3, 2)
d2 = f.read()
print(d2.decode(‘utf-8‘)) # 890

# # 游标操作 - 从当前位置开始
# f.seek(-3, 1)
# d2 = f.read()
# print(d2.decode(‘utf-8‘)) # 34567890

# # 游标操作 - 从头开始
# f.seek(3, 0)
# d2 = f.read()
# # print(d2)
# print(d2.decode(‘utf-8‘)) # 好1234567890

# 游标写:会覆盖书写
with open(‘source.txt‘, ‘rb+‘) as f:
f.seek(11)
# print(f.read())
f.write(b‘000‘)

print("-------------------------------------")
# 案例
with open(‘001.png‘, ‘rb‘) as f:
data = f.read()
print(len(data))

# 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
# 形成秒传规则
tagData = b‘‘
with open(‘001.png‘, ‘rb‘) as f:
# 通过其他途径(sys模块)来获取文件总大小
data = f.read()
length = len(data)
# 开头
f.seek(0, 0)
d1 = f.read(10)
# 1/3
f.seek(length // 3, 0)
d2 = f.read(10)
# 2/3
f.seek(length // 3 * 2, 0)
d3 = f.read(10)
# 末尾
f.seek(-10, 2)
d4 = f.read(10)
tagData = d1 + d2 + d3 + d4
# 秒传依据
print(tagData)

newData = b""
with open(‘001.png‘, ‘rb‘) as f:
data = f.read()
length = len(data)
f.seek(0, 0)
newData += f.read(10)
f.seek(length // 3, 0)
newData += f.read(10)
f.seek(length // 3 * 2, 0)
newData += f.read(10)
f.seek(-10, 2)
newData += f.read(10)

if newData == tagData:
print(‘秒传成功‘)
else:
print(‘慢慢传去吧‘)

文件操作

标签:处理   mp4   event   div   decode   路径   png   操作系统   开始   

原文地址:https://www.cnblogs.com/wangtenghui/p/10609719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!