文件基本操作

Posted PAYNE1Z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件基本操作相关的知识,希望对你有一定的参考价值。

# data = open(‘nothing_on_you.txt‘, encoding=‘utf-8‘).read()
f = open(‘nothing_on_you.txt‘, ‘r‘, encoding=‘utf-8‘) # 只读

data = f.read()
data2 = f.read()
print(data, ‘-------------‘, data2)
# r 模式读文件内容默认从第一行开始读
# 第二次赋值给data2时会从最后一行开始,所以data2是空的,简直无fuck说

f = open(‘nothing‘, ‘w‘, encoding=‘utf-8‘) # 写
f.write(‘---> bruno mars‘)
# w 模式相当于shell中的 >


f = open(‘nothing_on_you.txt‘, ‘a‘, encoding=‘utf-8‘) # 追加
f.write(‘\n+++> bruno mars‘)
# a 模式相当于shell中的 >>

f.readline() # 读取一行
f.readlines() # 读取所有行变成一个数组


# 循环打印每一行,第十行不输出,用其内容代替
# low loop 会一次读取所有行到内存,文件过大时性能受影响
for index, line in enumerate(f.readlines()):
        if index == 9:
                print(‘===========================‘)
                continue
        print(line.strip())

# high bigger loop 一次只读一行到内存,不管多大的文件都是high performance
count = 0
for line in f:
        count += 1
        if count == 11:
                print(‘-----------------------‘)
                continue
        print(line)
        
f.close() # 在python中打开一个文件后操作完了都要有关闭动作

f = open(‘nothing‘, ‘r‘, encoding=‘utf-8‘)
print(f.tell()) # 读第一个字符的指针(下标)0
print(f.readline())
print(f.read(5)) # 读5个字节
print(f.tell()) # 这会读到第二行的第六个字节的指针(下标)
f.seek(0) # 回到指定指针位置
print(f.tell()) # 这里就会打印第一个字符位置

print(f.encoding) # 当前字符编码
print(f.name) # 文件名
print(f.seekable()) # 判断文件是否能seek (设备文件与tty是不能seek的)
print(f.readable()) # 判断文件是否可读

f.flush() # 将内存的数据写入磁盘
# 进度条
import sys, time
for i in range(10):
     sys.stdout.write(‘#‘) # 输出到屏幕
     sys.stdout.flush() # 将输出实时显示到屏幕,不要缓存再一起输出
     time.sleep(0.1) # 相当于shell sleep

f = open(‘nothing‘, ‘r+‘, encoding=‘utf-8‘)
# r+ 可读可写(追加)
# f.truncate(10) # 截取文件前10个字符(在文件中只保留前10个字各个字符,其它的会被截掉)
# print(f.read()) # 此时文件里只有前面10个字符
print(f.readline())
print(f.readline())
f.write(‘hello \n‘) # 这种模式下内容(不管你seek到哪)永远会追加到文件最后面
print(f.readline())
f.close()


f1 = open(‘nothing1‘, ‘w+‘, encoding=‘utf-8‘)
# w+ 可写可读
f1.write(‘---------1---------\n‘)
f1.write(‘---------2---------\n‘) # 写入两行(加上换行第行20个字符)
print(f1.read())
f1.seek(0) # 跳到文件开头
print(f1.tell())
f1.write(‘============\n‘) # 再写入一行(加上换行13个符),这一行便会覆盖从文件第一个字符开始到新写入的字符串长度的字符
# 文件内容会如下:如果新写入的行字符数比原先第一行要多,那么第一行的字符都会被覆盖
# 就好比硬盘里原本写着有100个字符,seek到哪再写入就会从哪里开始覆盖原先的字符,写入多少就覆盖多少
# 例: 写有123456789 seek到3的位置再写 abc ,内容就会变成:1234abc89 ;
# seek到4的位置再写 HelloWorld ,内容就会变成:12345HelloWorld
# 不seek,接着写入 adidas ,内容就会变成:123456789adidas
# ============
# -----
# ---------2---------
f1.close()

f2 = open(‘test‘, ‘rb‘) # 读二进制文件(读二进制不需要encoding)
f2 = open(‘test‘, ‘wb‘) # 写二进制
f2.write(‘HelloWorld‘.encode()) # 写二进制就要先转成二进制
f2 = open(‘test‘, ‘ab‘) # 追加二进制‘‘‘


# 基本操作

f = open(‘lyrics‘) # 打开文件
first_line = f.readline()
print(‘first line:‘, first_line) # 读一行
print(‘我是分隔线‘.center(50, ‘-‘))
data = f.read() # 读取剩下的所有内容,文件大时不要用
print(data) # 打印文件

f.close() # 关闭文件


# 打开文件的模式有:

# r,只读模式(默认)。
# w,只写模式。【不可读;不存在则创建;存在则删除内容;】
# a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
# 
# "+" 表示可以同时读写某个文件
# r +,可读写文件。【可读;可写;可追加】
# w +,写读
# a +,同a
# 
# "U" 表示在读取时,可以将 \r \n \r\n自动转换成 \n (与r或r + 模式同使用) 比如:在unix上读windows上的文件
# rU 
# r + U
#
# "b" 表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
# rb
# wb
# ab

  

以上是关于文件基本操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段2——.vue文件的模板

c_cpp Robolution基本代码片段

代码片段 - Golang 实现集合操作