0
点赞
收藏
分享

微信扫一扫

python-文件

老王420 2022-03-11 阅读 130
文件的存储方式

在计算机中,文件是以二进制的方式保存在磁盘上的

文本文件和二进制文件
  1. 文本文件
    可以使用文本编辑器软件查看,比如cat命令
    本质上还是二进制文件
  2. 二进制文件
    保存的内容不是给人直接阅读的,而是提供给其他软件使用的
    二进制文件不能使用文本编辑器打开
    比如图片,音频,视频等
文件的基本操作
  1. 操作文件的套路
    打开文件–》读写文件–〉关闭文件

  2. 相关的函数或方法
    open,打开文件,并且返回一个文件对象
    read/write,读写文件
    close,关闭文件

#读取文件
fp=open('name')
txt=fp.read() #返回文件所有内容
fp.close()
文件指针

文件指针标记从哪个位置开始读取数据
但第一次打开文件时,文件指针在文件开头
执行read方法后,文件指针移动到了文件的末尾,再调用read方法,就读取不到内容

打开文件的方式

open(文件名,打开方式)
默认以只读方式打开
| 访问方式 | 说明|
|r|以只读方式打开文件,如果文件不存在抛出异常|
| w | 以只写方式打开文件,如果文件存在,会覆盖,不存在,则创建新文件 |
|a| 以追加方式打开文件,若文件已存在,文件指针在文件的末尾,若不存在,则创建文件|
还有r+,w+,a+等方式

readline,按行读取文件
with open("name") as fp:
    text=fp.readline()
         while (text!=''):        
            print(text,end='')
            text=fp.readline()

以下代码是错误的,会导致缺行:

with open("name") as fp:
    while fp.readline()!='':
        print(fp.readline())

原因是:while里的fp.readline读取到了一行,将文件指针移到了下一行,循环里的fp.readline就是下一行的,导致缺失行

文件写入

使用write方法写入文件

小文件的复制

由于read方法是将所有内容一起读入内存,如果文件比较小,可以使用read方法

#小文件的复制,read是一次性读取文件到内存中,如果文件比较小,read还可以

fp_read=open("name")
fp_write=open("write",'w')
fp_write.write(fp_read.read())
大文件的复制
#大文件的复制,使用readline读取

with open("name") as fp_read:
    with open("write1","w") as fp_write:
        while True:
            text=fp_read.readline()
            if text=='':
                break
            fp_write.write(text)
with open("name") as fp_read:
    with open("write2","w") as fp_write:
        text=fp_read.readline()
        while text!="":
            fp_write.write(text)
            text=fp_read.readline()
文件读写方式

在这里插入图片描述

目录操作 os模块
os.rename("write","my_write") #重命名文件,会抛出异常FileNotFoundError: [Errno 2] No such file or directory: 'write' -> 'my_write'

os.remove("write2")  #删除文件,会抛出异常FileNotFoundError: [Errno 2] No such file or directory: 'write2'

print(os.listdir('../oslearn'))#列出文件夹下的所有文件和文件夹
os.mkdir("write2")  #创建文件夹,会抛出异常FileExistsError: [Errno 17] File exists: 'write2'
os.rmdir("test3") #删除目录 会抛出异常FileNotFoundError: [Errno 2] No such file or directory: 'test3'
print(os.getcwd()) #获取当前目录
print(os.path.isdir("my_write"))#判断是否是文件夹
print(os.path.isfile("my_write"))#判断是否是文件
print(os.path.join(os.getcwd(),"test4"))#拼接路径
print(os.getenv("PATH")) #获取环境变量
os.walk()

通过在目录树中游走,输出目录中的文件名
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
top是需要遍历的目录
返回值是一个三元组(root,dirs,files),这个三元组整体是一个生成器:<generator object _walk at 0x7f8688eb3820>
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
所以,walk可以用于遍历目录

for item in os.walk('../oslearn'):
    print(item)

输出:

('../oslearn', ['write2', 'conf'], ['my_write', 'demo2.py', '__init__.py', 'demo6.py', 'write1', 'demo1.py', 'demo5.py', 'demo4.py', 'name'])
('../oslearn/write2', [], [])
('../oslearn/conf', ['collection'], [])
('../oslearn/conf/collection', ['fraud'], [])
('../oslearn/conf/collection/fraud', [], ['collection_batch_input_output_preprod.conf', 'collection_batch_input_output.conf'])

遍历目录,并输出文件的路径

for root,dirs,files in os.walk('../oslearn'):
    for file in files:
        print(os.path.join(root,file))
    for dir in dirs:
        print(dir)
举报

相关推荐

0 条评论