(Python3)- 组织文件&字符编码

1.复制文件:shutil.copy(source,destination),将source文件复制到destination的路径。

2.复制文件夹:shutil.copytree(source,destination),将source文件夹复制到destination的路径。

3.移动文件以及文件夹:shutil.move(source,destination),注意如果存在相同文件的话就会造成覆盖。而且如果错误移动到不存在的路径,那么文件就会被移动且重命名为不存在的路径名称。

*他们都会返回最终的移动/复制的路径。如果原文件不存在的话就会抛出异常。

4.永久删除文件和文件夹:

  • os.unlink(path): 将删除path的文件(文件本身而非链接所知对象)。
  • os.rmdir(path): 删除空文件夹。
  • shutil.rmtree(path): 删除文件夹树。

5.安全删除:使用第三方send2trash

  • send2trash.send2trash(path): 将文件或文件夹发送到系统回收站。

6.文件夹遍历:os.walk(dir) : 将返回一个存在于dir的文件夹名称字符串,文件夹中子文件夹的列表,当前文件夹中的文件的字符串列表。可以在迭代中使用。

7.Zip压缩文件:使用第三方模块zipfile

  • 创建新的压缩包:
  • 创建ZipFile对象,zipfile.zipFile(path), 从path的zip文件创建一个对象。
  • zipFileobj.namlist():获取zipFile对象的所有文件以及文件夹的字符串列表。
  • 内容的ZipInfo对象:可以通过zipFileobj.getinfo(fileinZipfile)获取某一个zip内容的信息的对象。ZipInfoobj.file_size 获取文件的大小,ZipInfoobj.compress_size 可以获取文件的大小。
  • 设置密码:ZipFileobj.setpassword(pwd)
  • 解压缩文件:zipFileobj.extractall(str=os.getcwd()):解压全部文件到目录str。解压缩单个文件:zipFileobj.extract(filepathinZip,str=os.getcwd())。返回被解压缩后的文件的路径。
  • 创建和添加文件到ZIP文件:zipFileobj对象的write(path,compress_type=zipfile.ZIP_DEFLATED),compress_type可以指定压缩的算法。这里制定Deflate算法。但是需要在打开文件的时候加上w或者+的参数。
  • 读取某个文件提供密码:ZipFileobj.read(name[, pwd]),pwd参数可以指定密码不仅限于read。注意:密码需要用UTF-8编码,如果py文件指定了其他的编码,请使用pwd=str('xxxxxx').encode('utf_8')

关闭zipFile对象:close()方法

8.str字符串的编码:

  • 常见的用于表示符号、英文字母的ASCII、使用两个字节的Unicode编码、UTF-8可变长的编码和GB2312编码,Python可以使用
    # -*- coding: utf-8 -*-

    来指定。他们的大小关系可以参考:字符串和编码

  • Unicode不会更具字符的类型改变长度(固定两个字节,多余的位补0)。所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

    字符 ASCII Unicode UTF-8
    A 01000001 00000000 01000001 01000001
    x 01001110 00101101 11100100 10111000 10101101

    从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

  • Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。
  • 直接用Unicode表示中文:
  • >>> '\u4e2d\u6587'
    '中文'
  • 使用前缀b'str'可以吧'str'的单位改为字节。
  • str.encode('utf-8')可以讲str改为UTF-8;str.decode('utf-8')可以将str解析为UTF-8的编码。
  • len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数。
  • >>> len(b'ABC')
    3
    >>> len(b'\xe4\xb8\xad\xe6\x96\x87')
    6
    >>> len('中文'.encode('utf-8'))
    6

参考链接: