美文网首页Python学习
Python | 如何读写文件?

Python | 如何读写文件?

作者: Quora文选 | 来源:发表于2019-05-06 20:27 被阅读0次

    读写文件

    2019年05月06日 18:30:18

    《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版

    8.1 文件与文件路径

    8.1.1 正斜杠

    Windows 上的倒斜杠以及 OS X 和 Linux 上的正斜杠。在 Windows 上,路径书写使用倒斜杠作为文件夹之间的分隔符。

    但在 OS X 和Linux 上,使用正斜杠作为它们的路径分隔符。

    如果想要程序运行在所有操作系统上,在编写 Python 脚本时,就必须处理这两种情况。

    os.path.join()[1]函数来做这件事很简单。如果将单个文件和路径上的文件夹名称的字符串传递给它,os.path.join()就会返回一个文件路径的字符串,包含正确的路径分隔符。在交互式环境中输入以下代码:

    >>> import os
    >>> os.path.join('user','bin','spam')
    'user\\bin\\spam'
    

    如果我在 OS X 或 Linux 上调用这个函数,该字符串就会是'usr/bin/spam'。

    下面的例子将一个文件名列表中的名称,添加到文件夹名称的末尾。

    myFiles = ['第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf',
    '第2本:《Python编程:从入门到实践》.pdf',
    '第3本:《Python核心编程(第3版)》@玉姐.pdf']
    for filename in myFiles:
        print(os.path.join('f:\[008]Python\[001]分类学习\基础学习',filename))
    
    # 输出:
    f:\[008]Python\[001]分类学习\基础学习\第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf
    f:\[008]Python\[001]分类学习\基础学习\第2本:《Python编程:从入门到实践》.pdf
    f:\[008]Python\[001]分类学习\基础学习\第3本:《Python核心编程(第3版)》@玉姐.pdf
    

    8.1.2 当前工作目录

    每个运行在计算机上的程序,都有一个“当前工作目录”,或 cwd。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用 os.getcwd()[2]函数,可以取得当前工作路径的字符串,并可以利用 os.chdir()[3]改变它。在交互式环境中输入以下代码:

    >>> import os
    >>> os.getcwd()
    'E:\\坚果云\\[014] eDiary学习笔记\\[001] 代码学习\\Python\\代码片段\\2019-05-03-利用python操作Excel表'
    >>> os.chdir('e:\坚果云\[014] eDiary学习笔记')
    >>> os.getcwd()
    'e:\\坚果云\\[014] eDiary学习笔记'
    

    8.1.3 绝对路径与相对路径

    有两种方法指定一个文件路径。

    • “绝对路径”,总是从根文件夹开始。
    • “相对路径”,它相对于程序的当前工作目录。

    还有点.和点点..文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。

    • 单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩写。
    • 两个句点(“点点”)意思是父文件夹。

    相对路径开始处的.\是可选的。例如,.\spam.txt 和 spam.txt 指的是同一个文件。

    8.1.4 用 os.makedirs()创建新文件夹

    >>> import os
    >>> os.getcwd()
    'e:\\坚果云\\[014] eDiary学习笔记'
    >>> os.chdir('f:\[008]Python\[001]分类学习\基础学习')
    >>> os.getcwd()
    'f:\\[008]Python\\[001]分类学习\\基础学习'
    >>> os.makedirs('f:\\[008]Python\\[001]分类学习\\基础学习\\1\\2')
    

    8.1.5 os.path 模块

    http://docs.python.org/3/library/os.path.html

    8.1.6 处理绝对路径和相对路径

    os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的路径是否为绝对路径。

    • 调用 os.path.abspath(path)[4]将返回参数的绝对路径的字符串。这是将相对路径转
      换为绝对路径的简便方法。
    • 调用 os.path.isabs(path)[5],如果参数是一个绝对路径,就返回 True,如果参数是
      一个相对路径,就返回 False。
    • 调用 os.path.relpath(path, start)[6]将返回从 start 路径到 path 的相对路径的字符串。
      如果没有提供 start,就使用当前工作目录作为开始路径。
    >>> os.path.abspath('.')
    'f:\\[008]Python\\[001]分类学习\\基础学习'
    >>> os.path.abspath('.\\1')
    'f:\\[008]Python\\[001]分类学习\\基础学习\\1'
    
    >>> os.path.isabs('.')
    False
    
    >>> os.path.isabs(os.path.abspath('.'))
    True
    
    >>> os.path.relpath('f:\[008]Python\[001]分类学习\基础学习','f:\[008]Python')
    '[001]分类学习\\基础学习'
    

    调用 os.path.dirname(path)[7]将返回一个字符串,它包含 path 参数中最后一个斜杠之前的所有内容。调用 os.path.basename(path)[8]将返回一个字符串,它包含 path 参数中最后一个斜杠之后的所有内容。一个路径的目录名称和基本名称如图 8-4 所示。

    >>> os.path.dirname('f:\[008]Python\[001]分类学习\基础学习\第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf')
    'f:\\[008]Python\\[001]分类学习\\基础学习'
    >>> os.path.basename('f:\[008]Python\[001]分类学习\基础学习\第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf')
    '第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf'
    

    如果同时需要一个路径的目录名称和基本名称,就可以调用 os.path.split()[9],获得这两个字符串的元组

    >>> name = 'f:\[008]Python\[001]分类学习\基础学习\第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf'
    >>> os.path.split(name)
    ('f:\\[008]Python\\[001]分类学习\\基础学习', '第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf')
    

    可以调用 os.path.dirname()和 os.path.basename(),将它们的返回值放在一个元组中,从而得到同样的元组。

    >>> (os.path.dirname(name), os.path.basename(name))
    ('f:\\[008]Python\\[001]分类学习\\基础学习', '第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf')
    

    注意:

    os.path.split()不会接受一个文件路径并返回每个文件夹的字符串的列表。

    如果需要这样,请使用split()字符串方法,并根据 os.path.sep[10] 中的字符串进行分割。

    根据程序运行的计算机,os.path.sep 变量设置为正确的文件夹分割斜杠。

    >>> name.split(os.path.sep)
    ['f:', '[008]Python', '[001]分类学习', '基础学习', '第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf']
    

    split()字符串方法将返回一个列表,包含该路径的所有部分。如果向它传递os.path.sep,就能在所有操作系统上工作。

    8.1.7 查看文件大小和文件夹内容

    一旦有办法处理文件路径,就可以开始搜集特定文件和文件夹的信息。os.path 模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。

    • 调用 os.path.getsize(path)[11]将返回 path 参数中文件的字节数。

    • 调用 os.listdir(path)[12]将返回文件名字符串的列表,包含 path 参数中的每个文件

      请注意,这个函数在 os 模块中,而不是 os.path

    >>> os.path.getsize('f:\[008]Python\[001]分类学习\基础学习\第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf')
    14955982
    >>> os.listdir('.')
    ['1', '第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf', '第2本:《Python编程:从入门到实践》.pdf', '第3本:《Python核心编程(第3版)》@玉姐.pdf']
    

    计算文件夹总大小:

    >>> totalSize = 0
    >>> for fileName in os.listdir('f:\[008]Python\[001]分类学习\基础学习'):
        totalSize = totalSize + os.path.getsize(fileName)
        
    >>> print(totalSize)
    53969252
    

    或者:

    >>> totalSize = 0
    >>> for fileName in os.listdir('f:\[008]Python\[001]分类学习\基础学习'):
        totalSize = totalSize + os.path.getsize(os.path.join('f:\[008]Python\[001]分类学习\基础学习',fileName))
        
    >>> print(totalSize)
    53969252
    

    8.1.8 检查路径有效性

    如果你提供的路径不存在,许多 Python 函数就会崩溃并报错。os.path 模块提供了一些函数,用于检测给定的路径是否存在,以及它是文件还是文件夹。

    • 如果 path 参数所指的文件或文件夹存在,调用 os.path.exists(path)[13] 将返回 True,
      否则返回 False。
    • 如果 path 参数存在,并且是一个文件,调用 os.path.isfile(path)[14] 将返回 True,否
      则返回 False。
    • 如果 path 参数存在,并且是一个文件夹,调用 os.path.isdir(path)[15] 将返回 True,
      否则返回 False。
    >>> os.path.exists('f:\[008]Python\[001]分类学习\基础学习')
    True
    >>> os.path.exists('f:\[008]Python\[001]分类学习\基础学习1')
    False
    >>> os.path.isdir('f:\[008]Python\[001]分类学习\基础学习')
    True
    >>> os.path.isfile('f:\[008]Python\[001]分类学习\基础学习')
    False
    >>> os.path.isfile('f:\[008]Python\[001]分类学习\基础学习\第1本:《Python编程快速上手—让繁琐工作自动化》 PDF中文高清晰完整版.pdf')
    True
    
    >>> os.path.exists('f:\\')
    True
    >>> os.path.exists('g:\\')
    False
    

    8.2 文件读写过程

    (待更新)



    1. os.path.join()

    2. os.getcwd()

    3. os.chdir()

    4. os.path.abspath(path)

    5. os.path.isabs(path)

    6. os.path.relpath(path, start)

    7. os.path.dirname(path)

    8. os.path.basename(path)

    9. os.path.split()

    10. os.path.sep

    11. os.path.getsize(path)

    12. os.listdir(path)

    13. os.path.exists(path)

    14. os.path.isfile(path)

    15. os.path.isdir(path)

    相关文章

      网友评论

        本文标题:Python | 如何读写文件?

        本文链接:https://www.haomeiwen.com/subject/ftqjoqtx.html