Python基础---Task07:文件与文件系统

Python基础---Task07:文件与文件系统

  • 文件
    • 读写文件
  • 文件系统
    • 操作文件路径
      • os
      • os.path
      • 输出一定文件名
    • 获取文件信息
    • 判断文件和路径
    • 文件编码
      • 字符串类型和bytes类型

文件

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

读写文件

1.文件常见编码:ascii, latin-1, utf-8和utf-16
其中ascii对应从U+0000到U+007F范围内的7位字符。
latin-1是字节0-255到U+0000至U+00FF范围内Unicode字符的直接映射。 当读取一个未知编码的文本时使用latin-1编码永远不会产生解码错误。

2.rt只写文件,覆盖重名文件;
at只写文件,不覆盖;
xt只有不存在时写

# 只读文件
with open('E://python_basicCourse/Readme.txt','rt'
        ,encoding='utf-8') as f:     #以utf-8编码读取文件

    file = f.read()
    print(file)
   # 缩进块结束后自动关闭文件
   
# 只写文件    
with open('E://python_basicCourse/test.txt','wt',
        errors = 'replace') as f:
    words = 'keep studying efficiently'
    print(words, file = f) # 把words 写到打开的文本里去
    # errors = 'replace' 表示文件编码不为utf-8时跳过

#读写2进制
with open('somefile.bin', 'rb') as f:
    data = f.read()
    text = data.decode('utf-8')
   # 读取2进制文件时要解码
  
with open('somefile.bin', 'wb') as f:
    words = 'keep studying efficiently'    
    f.write(words.encode('utf-8'))
    # 写入2进制文件必须编码写入

文件系统

操作文件路径

用 os、os.path、glob模块

os

os.getcwd() # 返回工作目录
 >> Out[6]: 'E:\\python_basicCourse'

os.chdir('E:\\') 
#修改工作目录到 'E:\\'
print(os.getcwd())  
# >> E:\\

os.listdir('.') 
# 返回当前目录(工作目录)所有文件名
os.listdir('..')
# 返回上一级目录、所有文件名


os.makedirs('E:\\python_test') 
# 在工作目录下创建多层文件夹,若文件重名会报错
os.makedirs('E:\\python_tes') 

os.rmdir('E:\\python_tes') # 删除空文件夹

os.rename('E:\\python_test','E:\\python_check') 
 文件夹重命名

 运行系统shell命令
os.system('cmd') # 打开命令行
os.system('calc') # 打开计算机

os.path

os.path.basename('E:\\PyCharmProjects\Head_firsr_coding.py') 
# 只返回文件名
os.path.dirname('E:\\PyCharmProjects\Head_firsr_coding.py')
# 只返回路径
os.path.splitext('E:\\PyCharmProjects\Head_firsr_coding.py')
# 返回文件名和扩展名

输出一定文件名

pyfiles = [name for name in os.listdir('.')
            if name.endswith('.py')]
# 获取当前目录所有.py结尾的文件名

'''或者'''
import glob
pyfiles = glob.glob('file_OS*.py')
# 获取当前目录满足条件的文件名

'''或者'''
from fnmatch import fnmatch
pyfiles = [name for name in os.listdir('.')
            if fnmatch(name, '*.py')]
# 获取当前目录所有.py结尾的文件名

获取文件信息

用 os、os.path、time模块

import time

def return_py (path):
    os.chdir(path) # 工作目录改成path
    for i in os.listdir(): # 获取所有文件路径
        if os.path.splitext(i)[1] == '.py': 
            print(os.path.splitext(i)[0]) # 输出文件名
            print(os.path.getsize(i)) # 输出文件大小(byte)
            print(os.path.getctime(i)) # 输出创建时间
            print(time.gmtime(os.path.getatime(i))) # 输出最近访问时间            
            print(time.localtime(os.path.getmtime(i))) # 输出最近修改时间

    return_py('E:\\python_basicCourse') # 注意路径要用


判断文件和路径

os.path.isfile('E:\\PyCharmProjects\Head_firsr_coding.py') 
# 判断是否存在文件
os.path.isdir('E:\\PyCharmProjects') 
# 判断是否是路径

# 测试文件是否存在
os.path.exists('E:\\PyCharmProjects')
# >> True
# 测试路径是否存在

os.path.isfile('E:\\PyCharmProjects\Head_firsr_coding.py')
# 判断是否为文件,是路径则返回False

文件编码

  • ascii码共编码127个字符,用一个字节表示一个字符,包括数字0~9(48~57),大写英文(65~90)小写英文(97 ~122)等其他一些符号,
  • Unicode编码通常用两个字节编码一个字符,较复杂时可能用4个字节。python默认以Unicode编码!
  • UTF-8编码是根据一个Unicode字符对应的数字大小编码成1-6个不等字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。因此ASCII编码实际上可以被看成是UTF-8编码的一部分!

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器

字符串类型和bytes类型

str类型中一个字符占多个字节,bytes中一个字符占一个字节

纯英文的str可以用ASCII编码或UTF-8编码为bytes,含有中文的str只能用UTF-8编码为bytes

string='ABC # str类型
b_string=b'ABC' # byte类型

string.encode('utf-8') 
# 把str(Unicode)编码成byte(utf-8)
>> Out[75]: b'ABC'

b'\xe5\x92\xb8\xe9\xb1\xbc'.decode('utf-8',errors='ignore')
# 把utf-8解码成Unicode
>> Out[76]: '咸鱼

len('咸鱼') # Unicode编码中文长度
Out[77]: 2

len(b'\xe5\x92\xb8\xe9\xb1\xbc') # utf-8编码中文长度
Out[78]: 6

8 days

参考文献:
https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html
https://www.liaoxuefeng.com/wiki/1016959663602400

你可能感兴趣的:(Python)