在编程的世界里,文件是数据存储和交换的重要方式之一。无论是读取配置文件,还是写入日志信息,文件操作是每个程序员必须掌握的技能。而在众多编程语言中,open 函数是进行文件操作的基础,它为我们提供了一种标准的方式来打开文件,并进行读写操作。

# 1. open 函数的基本用法

open 函数的基本语法如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
1
  • file: 要打开的文件的路径。
  • mode: 打开文件的模式,常见的有:
    • 'r':只读模式,默认值。
    • 'w':写入模式,如果文件已存在则覆盖,不存在则创建。
    • 'a':追加模式,如果文件已存在则在文件末尾追加内容,不存在则创建。
    • 'b':二进制模式,通常与 'w', 'r', 'a' 结合使用。
    • '+':更新模式,可以读写文件。
  • buffering: 指定缓冲机制,-1 表示使用默认缓冲。
  • encoding: 指定文件的编码方式,如 'utf-8'
  • errors: 指定编码错误的处理方式。
  • newline: 控制不同操作系统换行符的处理方式。
  • closefd: 指定是否在文件关闭时关闭文件描述符。
  • opener: 指定一个可调用对象,用于在打开文件时调用。

# 2. 文件模式详解

文件的打开模式决定了我们对文件的操作类型:

  • 只读模式 ('r'):这是默认模式,只能读取文件,试图写入会引发异常。
  • 写入模式 ('w'):如果文件存在,将被截断为零长度,即原有内容会被删除。如果文件不存在,会创建新文件。
  • 追加模式 ('a'):如果文件存在,写入的数据会被添加到文件末尾。如果文件不存在,会创建新文件。
  • 读写模式 ('+'):可以读取和写入文件。但在写入前需要使用 seek() 方法移动到正确的位置。

# 3. 编码与错误处理

在处理文本文件时,编码是一个重要的考虑因素。open 函数允许我们通过 encoding 参数指定文件的编码方式。例如,使用 'utf-8' 可以确保正确处理 Unicode 字符。

errors 参数用于指定如何处理编码错误。常见的错误处理方式有:

  • 'strict':默认值,遇到编码错误时抛出异常。
  • 'ignore':忽略错误,不写入错误的字符。
  • 'replace':用一个替代字符来替换错误的字符。

# 4. 缓冲与性能

buffering 参数控制文件的缓冲机制。缓冲可以提高文件读写的效率,特别是在处理大量数据时。buffering=0 表示不使用缓冲,每次读写都直接操作文件系统;buffering=1 表示使用行缓冲,适合读写文本文件;buffering=-1 表示使用默认的缓冲方式。

# 5. 文件上下文管理器

Python 的文件对象支持上下文管理器协议,这意味着可以使用 with 语句来自动管理文件的打开和关闭。使用 with 语句可以确保文件在使用后正确关闭,即使在读取文件时发生异常也是如此。

with open('example.txt', 'r') as file:
    data = file.read()
# 文件已经自动关闭
1
2
3

# 6. 文件读写操作

一旦文件被成功打开,我们可以使用各种方法来读取或写入数据:

  • read(size):读取指定数量的字符。
  • readline():读取下一行。
  • readlines():读取所有行并返回列表。
  • write(string):写入字符串。
  • writelines(sequence):写入序列中的每个字符串。

# 7. 文件指针与位置

文件操作中,文件指针的位置非常重要。seek(offset, whence) 方法可以用来移动文件指针到指定位置。whence 参数指定了偏移量 offset 的参照点:

  • 0:文件开头。
  • 1:当前位置。
  • 2:文件末尾。

# 8. 文件的关闭

使用 close() 方法可以关闭文件,释放系统资源。但在使用 with 语句时,这一步是自动完成的。

# 9. 实践案例

下面是一个简单的示例,演示了如何使用 open 函数读取和写入文件:

# 写入数据到文件
with open('output.txt', 'w') as f:
    f.write('Hello, world!')

# 读取数据
with open('output.txt', 'r') as f:
    content = f.read()
    print(content)
1
2
3
4
5
6
7
8

# 2.Parquet 文件处理

在开始之前,确保你的 Python 环境中已经安装了 Pandas 库和 pyarrow(用于读写 Parquet 文件)。如果尚未安装,可以通过以下命令进行安装:

pip install pandas pyarrow
1
import pandas as pd

path1 = 'create_final_entities.parquet'

path2 = '1111/create_final_entities.parquet'

# 读取Parquet文件
df1 = pd.read_parquet(path1)
df2 = pd.read_parquet(path2)

# 修改df1中每一条记录的name字段首尾的引号
df1['name'] = df1['name'].str.strip('"')
df1['type'] = df1['type'].str.strip('"')
df1['description'] = df1['description'].str.strip('"')

# 合并两个DataFrame
df_combined = pd.concat([df1, df2], ignore_index=True)

# 定义新文件的路径
output_path = '2222/create_final_entities.parquet'

# 将合并后的数据写入新的Parquet文件
df_combined.to_parquet(output_path)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
上次更新: 11/3/2024, 10:37:37 AM