文件操作_列表、字典生成式

发布时间 2023-12-06 14:37:02作者: Unlucky

【一】open

1.1 - open()用法

file = open(file_path, mode)
  • file_path表示文件的路径,可以是相对路径或绝对路径。
  • mode表示打开文件的模式,它是一个字符串。常见的模式包括:
    • 'r' 以只读模式打开文件(默认模式)。
    • 'w' 以写入模式打开文件,如果文件已存在,则覆盖原有内容;如果文件不存在,则创建新文件。
    • 'a' 以追加模式打开文件,如果文件已存在,则在文件末尾追加内容;如果文件不存在,则创建新文件。
    • 'x' 以创建模式打开文件,如果文件已存在,则抛出异常;如果文件不存在,则创建新文件。
    • 'b' 以二进制模式打开文件,用于处理二进制数据(例如图片、视频等)。
    • 't' 以文本模式打开文件(默认模式),用于处理文本数据。

打开文件后,你可以使用文件对象执行各种操作,例如读取文件内容或写入数据到文件中。完成操作后,应该使用close()方法关闭文件,以释放系统资源。例如:

file = open('file.txt', 'r')
content = file.read()
print(content)
file.close()

【二】whith open

2.1 with open()用法

with open 是一种Python语法,用于以一种更简洁和安全的方式打开文件。它可以自动管理文件的打开和关闭,无需显式调用close()方法。

以下是使用with open的基本语法:
mode表示打开文件的模式,它是一个字符串。常见的模式包括:

  1. 'r' 以只读模式打开文件(默认模式)。
  2. 'w' 以写入模式打开文件,如果文件已存在,则覆盖原有内容;如果文件不存在,则创建新文件。
  3. 'a' 以追加模式打开文件,如果文件已存在,则在文件末尾追加内容;如果文件不存在,则创建新文件。
  4. 'x' 以创建模式打开文件,如果文件已存在,则抛出异常;如果文件不存在,则创建新文件。
  5. 'b' 以二进制模式打开文件,用于处理二进制数据(例如图片、视频等)。
    • 't' 以文本模式打开文件(默认模式),用于处理文本数据。
with open(file_path, mode) as file:
    # 执行文件操作

with open语句块中,你可以执行与文件相关的操作,例如读取文件内容或写入数据到文件中。当退出with语句块时,文件将自动关闭,无论代码是否引发异常。

这种写法可以确保在处理文件时始终正确地关闭文件,避免资源泄露。它是一种推荐的做法,尤其在处理大量文件或复杂的文件操作时更为重要。

以下是一个使用with open读取文件的示例:

with open('file.txt', 'r') as file:
    content = file.read()
    print(content)

在上述示例中,文件被以只读模式打开,并读取文件内容到变量content中。当代码块执行完毕时,文件会自动关闭。

使用with open可以简化文件操作的代码,并确保文件在处理完毕后被正确关闭,提高代码的可读性和可维护性。

当使用with open打开文件时,可以通过指定encoding参数来指定字符编码。字符编码用于将文件中的字节序列解码为字符串,或将字符串编码为字节序列。

2.2 encodeing指定字符编码

以下是使用with open指定字符编码的示例:

with open('file.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

在上述示例中,文件以只读模式打开,并使用UTF-8字符编码读取文件内容。你可以根据文件的实际字符编码来指定encoding参数,例如UTF-8、GBK等。

请注意,字符编码是一个重要的概念,特别是当处理包含非ASCII字符的文本文件时。确保选择正确的字符编码,以避免乱码或解码错误的情况发生。

如果不指定encoding参数,默认情况下会使用系统的默认字符编码。但是,为了确保正确处理不同编码的文件,建议始终明确指定字符编码。

2.3 with open "r" 只读模式常用方法

在只读模式下,文件对象支持以下常用方法:

1. `read(size=-1)`: 读取文件中的内容。如果指定了`size`参数,则最多读取`size`个字符(或字节),否则读取整个文件内容。返回一个字符串(或字节串,如果以二进制模式打开文件)。

2. `readline(size=-1)`: 读取文件中的一行内容。如果指定了`size`参数,则最多读取`size`个字符(或字节),否则读取一整行。返回一个字符串(或字节串,如果以二进制模式打开文件)。

3. `readlines(hint=-1)`: 读取文件中的所有行,返回一个包含所有行的列表。如果指定了`hint`参数,则最多读取`hint`个字节(或字符)。

4.  `tell()`: 返回当前文件指针的位置(以字节为单位)。

5. `closed`: 一个布尔值,指示文件是否已关闭。

PS: 如果使用readlines()方法读取二进制文件,返回值将是一个包含所有行的列表,每一行都是字节串(bytes)的形式。每个字节串表示文件中对应行的二进制数据。

2.4 with open "w"写模式常用方法

在写模式下,文件对象支持以下常用方法:

1. write(str): 将字符串写入文件。

2. writelines(sequence): 将字符串序列写入文件。序列可以是一个列表或迭代器,每个元素都是要写入文件的字符串。

3. flush(): 将缓冲区的数据立即写入文件,而不是等到缓冲区满或文件关闭时才写入。

2.5 with open 判断文件属性方法

with open('dream.jpg', 'w', encoding='utf-8') as f:  
    print(f'可读性:{f.readable()}')  
    print(f'可写性:{f.writable()}')  
    print(f'是否编码格式:{f.encoding}')  
    # 可读性:False  
    # 可写性:True  
    # 是否编码格式:utf-8

【三】列表生成式

3.1 列表生成式的用法

列表推导式(List comprehension)是一种在编程语言中常见的语法结构,用于创建新的列表。它的作用是简化列表的创建过程,并且可以通过对原始列表的元素进行处理和筛选来生成新的列表。

使用列表推导式可以在一行代码中完成对列表的操作,包括筛选元素、对元素进行处理或转换等。列表推导式通常由方括号 [] 包围,其中包含一个表达式和一个或多个迭代器,用于指定要处理的原始列表的元素以及对元素的处理方式。

下面是一个使用列表推导式创建新列表的示例,假设有一个包含整数的列表,我们想要创建一个新列表,其中包含原列表中所有大于 5 的元素的平方:
1.

original_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = [x**2 for x in original_list if x > 5]

在这个示例中,列表推导式 [x**2 for x in original_list if x > 5] 通过遍历原列表 original_list 中的元素,并筛选出大于 5 的元素进行处理。对于每个满足条件的元素,表达式 x**2 会计算其平方,并将结果添加到新列表 new_list 中。最终,new_list 的值为 [36, 49, 64, 81, 100]

让每个元素执行相同的操作

list1 = [' dog', 'cat  ', ' sheep ']  
new_list = [i.strip() for i in list1]  
print(new_list)

总而言之,列表推导式提供了一种简洁的语法来创建新的列表,并且可以通过对原列表的元素进行处理和筛选来生成新的列表。它可以提高代码的可读性和简洁性,并在处理列表数据时提供了便利的方法。

【四】字典生成式

4.1 字典生成式的用法

字典生成式(Dictionary comprehension)是一种用于创建新字典的语法结构,类似于列表生成式。它可以简化创建字典的过程,并在一行代码中实现对原始字典的操作。

字典生成式的语法结构与列表生成式相似,但使用花括号 {} 包围,并包含一个键值对表达式和一个或多个迭代器,用于指定要处理的原始字典的键值对以及对键值对的处理方式。每个键值对表达式由冒号 : 分隔键和值。

举个例子,假设有一个包含整数的字典,我们想要创建一个新字典,其中包含原字典中所有值大于 5 的键值对,并将值取平方作为新字典的值:

original_dict = {'a': 1, 'b': 6, 'c': 3, 'd': 8, 'e': 2}
new_dict = {key: value**2 for key, value in original_dict.items() if value > 5}

在这个例子中,字典生成式 {key: value**2 for key, value in original_dict.items() if value > 5} 通过遍历原字典 original_dict 的键值对,并筛选出值大于 5 的键值对进行处理。对于每个满足条件的键值对,表达式 value**2 会计算其值的平方,并将结果作为新字典 new_dict 的值。最终,new_dict 的值为 {'b': 36, 'd': 64}

通过字典生成式,我们可以使用简洁的语法来创建新字典,并对原始字典的键值对进行处理和筛选