diff --git a/wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md b/wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md index be7ab61d..b31ed625 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md +++ b/wiki/programming-language/Python/进阶/拓展模块/WEB开发/Jinja 模板引擎.md @@ -7,7 +7,6 @@ keywords: tags: - Python - WEB -sidebar_position: 1 author: 7Wate date: 2023-10-18 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md b/wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md index 54e75fb8..4d5b0a0a 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md +++ b/wiki/programming-language/Python/进阶/拓展模块/数据处理/configparser 配置文件解析器.md @@ -2,12 +2,11 @@ title: configparser 配置文件解析器 description: python 内置标准库 configparser 配置文件解析器 keywords: -- python -- configparser + - python + - configparser tags: -- python -- configparser -sidebar_position: 1 + - python + - configparser author: 7Wate date: 2023-10-20 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md b/wiki/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md new file mode 100644 index 00000000..24ea0e0d --- /dev/null +++ b/wiki/programming-language/Python/进阶/拓展模块/数据处理/csv 文件读写.md @@ -0,0 +1,214 @@ +--- +title: csv 文件读写 +description: Python 标准库 csv 文件读写 +keywords: + - Python + - csv +tags: + - Python + - csv +author: 7Wate +date: 2023-10-20 +--- + +## CSV + +### CSV 文件是什么 + +CSV(Comma Separated Values,字符分隔值)是一种简单的文件格式,用来存储表格数据,如电子表格或数据库。CSV 文件由任意数量的记录组成,记录间以某种换行符分隔。每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。 + +### 用途和优点 + +CSV 文件常用于数据的导入导出,可以被大多数类型的软件包括文本编辑器和电子表格程序读取。其优点包括**简单、易于阅读、跨平台和语言兼容。** + +### 基本结构 + +CSV 文件由行和列组成。每一行代表一个数据记录,而列则代表该记录的字段。字段的值由逗号分隔,不同的行则由换行符分隔。 + +```text +name,age,job +John,25,Engineer +Alice,30,Doctor +``` + +## Python csv 模块 + +Python 的 `csv` 模块提供了一种方便的方式来操作 CSV 文件。它包括了用于读取和写入 CSV 数据的函数,以及用于处理 CSV 数据的类。 + +在 Python 中导入 `csv` 模块只需要简单的 `import` 语句: + +```python +import csv +``` + +### 主要函数和类 + +`csv` 模块的主要函数和类有: + +- `csv.reader()`:生成一个读取器对象,用于迭代读取 CSV 文件的每一行。 +- `csv.writer()`:生成一个写入器对象,用于将数据写入 CSV 文件。 +- `csv.DictReader()`:生成一个读取器对象,用于以字典形式读取 CSV 文件的每一行。 +- `csv.DictWriter()`:生成一个写入器对象,用于将字典数据写入 CSV 文件。 + +## 读取 CSV 文件 + +### 使用 csv.reader() 函数读取 CSV 文件 + +使用 `csv.reader()` 函数读取 CSV 文件的步骤如下: + +1. 打开你想要读取的 CSV 文件。 +2. 创建一个 `csv.reader` 对象,传入该文件对象作为参数。 +3. 迭代 `csv.reader` 对象,读取文件的每一行。 + +```python +import csv + +with open('example.csv', 'r') as file: + reader = csv.reader(file) + for row in reader: + print(row) +``` + +**读取 CSV 文件时可能遇到的问题包括编码问题、字段格式问题等。**常见解决方法包括指定文件的编码方式、使用 `try-except` 块处理可能出现的错误等。 + +### CSV 文件的读取实例 + +假设我们有一个名为 `employees.csv` 的 CSV 文件,内容如下: + +```plaintext +name,age,department +John Doe,30,Engineering +Jane Smith,40,Marketing +``` + +我们可以使用以下代码来读取这个文件: + +```python +import csv + +with open('employees.csv', 'r') as file: + reader = csv.reader(file) + for row in reader: + print(f'Name: {row[0]}, Age: {row[1]}, Department: {row[2]}') +``` + +## 写入 CSV 文件 + +### 使用 csv.writer() 函数写入 CSV 文件 + +使用 `csv.writer()` 函数写入 CSV 文件的步骤如下: + +1. 打开你想要写入的 CSV 文件。 +2. 创建一个 `csv.writer` 对象,传入该文件对象作为参数。 +3. 使用 `writerow()` 或 `writerows()` 方法,将数据写入文件。 + +```python +import csv + +with open('example.csv', 'w', newline='') as file: + writer = csv.writer(file) + writer.writerow(['name', 'age', 'job']) + writer.writerow(['John', '25', 'Engineer']) + writer.writerow(['Alice', '30', 'Doctor']) +``` + +**写入 CSV 文件可能遇到的问题包括权限问题、磁盘空间问题等。**常见解决方法包括检查文件写入权限、确保磁盘有足够空间等。 + +### CSV 文件的写入实例 + +假设我们需要将以下数据写入一个名为 `employees.csv` 的 CSV 文件: + +```python +employees = [ + ['name', 'age', 'department'], + ['John Doe', '30', 'Engineering'], + ['Jane Smith', '40', 'Marketing'] +] +``` + +我们可以使用以下代码来写入这个文件: + +```python +import csv + +with open('employees.csv', 'w', newline='') as file: + writer = csv.writer(file) + writer.writerows(employees) +``` + +## CSV 数据使用字典处理 + +### 使用 csv.DictReader() 函数读取 CSV 文件并返回字典 + +`csv.DictReader()` 函数可以将 CSV 文件的每行读取为一个字典,其中列名为键,列值为值。 + +```python +import csv + +with open('example.csv', 'r') as file: + reader = csv.DictReader(file) + for row in reader: + print(row) +``` + +### 使用 csv.DictWriter() 函数将字典写入 CSV 文件 + +`csv.DictWriter()` 函数可以将字典数据写入 CSV 文件。需要先指定列名,然后调用 `writeheader()` 方法写入列名,最后调用 `writerow()` 或 `writerows()` 方法写入字典数据。 + +```python +import csv + +with open('example.csv', 'w', newline='') as file: + fieldnames = ['name', 'age', 'job'] + writer = csv.DictWriter(file, fieldnames=fieldnames) + + writer.writeheader() + writer.writerow({'name': 'John', 'age': '25', 'job': 'Engineer'}) + writer.writerow({'name': 'Alice', 'age': '30', 'job': 'Doctor'}) +``` + +### 字典和 CSV 数据的交互 + +假设我们有一个名为 `employees.csv` 的 CSV 文件,内容如下: + +```plaintext +name,age,department +John Doe,30,Engineering +Jane Smith,40,Marketing +``` + +我们可以使用以下代码来读取这个文件,并打印出每个员工的名字和部门: + +```python +import csv + +with open('employees.csv', 'r') as file: + reader = csv.DictReader(file) + for row in reader: + print(f"Name: {row['name']}, Department: {row['department']}") +``` + +## CSV 文件中的错误和异常 + +读取和写入 CSV 文件时可能遇到的错误和异常包括文件不存在、文件不可读写、磁盘空间不足等。可以使用 try-except 结构来捕获和处理这些异常。 + +```python +import csv + +try: + with open('example.csv', 'r') as file: + reader = csv.reader(file) + for row in reader: + print(row) +except FileNotFoundError: + print('File not found.') +``` + +| 错误类型 | 错误描述 | 解决方案 | +| :------------------- | :--------------------------------- | :---------------------------------------------- | +| `FileNotFoundError` | 找不到指定的文件。 | 确保文件的路径和名称正确,且文件确实存在。 | +| `PermissionError` | 没有足够的权限打开文件。 | 确保你有足够的权限访问和修改文件。 | +| `IsADirectoryError` | 尝试打开的是一个目录,而不是文件。 | 确保指定的路径是文件,而非目录。 | +| `IOError` | 文件读写出错,例如磁盘空间不足。 | 确保磁盘有足够的空间,文件没有被其他程序锁定。 | +| `csv.Error` | CSV 文件格式错误。 | 确保 CSV 文件的格式正确,例如字段是否正确分隔。 | +| `UnicodeDecodeError` | 文件编码问题。 | 确保文件的编码和你在 Python 中指定的编码一致。 | diff --git a/wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md b/wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md index d3a5f05a..d32a6b66 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md +++ b/wiki/programming-language/Python/进阶/拓展模块/数据处理/json 编码和解码器.md @@ -7,7 +7,6 @@ keywords: tags: - Python - json -sidebar_position: 2 author: 7Wate date: 2023-10-20 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md b/wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md index 2f84f432..6619ad1f 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md +++ b/wiki/programming-language/Python/进阶/拓展模块/系统交互/logging 日志记录工具.md @@ -1,17 +1,16 @@ --- -title: logging 日志记录工具 -description: 全面介绍了Python标准库logging模块的用法,包括理论知识和代码示例 -keywords: -- Python -- logging -- 日志 -tags: -- Python -- logging -- 日志处理 -sidebar_position: 4 -author: 7Wate -date: 2023-10-20 +title: logging 日志记录工具 +description: 全面介绍了Python标准库logging模块的用法,包括理论知识和代码示例 +keywords: + - Python + - logging + - 日志 +tags: + - Python + - logging + - 日志处理 +author: 7Wate +date: 2023-10-20 --- ## 简介 diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md b/wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md index 84616c63..37dbb76b 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md +++ b/wiki/programming-language/Python/进阶/拓展模块/系统交互/loguru 日志库.md @@ -10,7 +10,6 @@ tags: - loguru - 日志 sidebar_position: 5 -author: 7Wate date: 2023-10-20 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md b/wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md index cd3b7f8c..a75780e0 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md +++ b/wiki/programming-language/Python/进阶/拓展模块/系统交互/os 多种操作系统接口.md @@ -2,13 +2,12 @@ title: os 多种操作系统接口 description: os 多种操作系统接口 keywords: -- python -- os -- 多种操作系统接口 + - python + - os + - 多种操作系统接口 tags: -- python -- 标准库 -sidebar_position: 1 + - python + - 标准库 author: 7Wate date: 2023-08-04 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md b/wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md index b72759f1..2bec8aaf 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md +++ b/wiki/programming-language/Python/进阶/拓展模块/系统交互/subprocess 子进程管理.md @@ -7,7 +7,6 @@ keywords: tags: - Python - 拓展模块 -sidebar_position: 3 author: 7Wate date: 2023-09-07 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md b/wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md index 762fbd0e..0e0bee77 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md +++ b/wiki/programming-language/Python/进阶/拓展模块/系统交互/sys 系统相关的形参和函数.md @@ -9,7 +9,6 @@ tags: - Python - 系统交互 - sys -sidebar_position: 2 author: 7Wate date: 2023-09-07 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md b/wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md index d8f53f0e..31e466dd 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md +++ b/wiki/programming-language/Python/进阶/拓展模块/网络处理/requests HTTP 库.md @@ -8,7 +8,6 @@ keywords: tags: - requests - Python -sidebar_position: 3 author: 7Wate date: 2023-10-19 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md b/wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md index 09c476c7..9168be9b 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md +++ b/wiki/programming-language/Python/进阶/拓展模块/网络处理/socket 底层网络接口.md @@ -7,7 +7,6 @@ keywords: tags: - Python - 标准库 -sidebar_position: 2 author: 7Wate date: 2023-09-09 --- diff --git a/wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md b/wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md index f44651ea..1c7038b9 100644 --- a/wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md +++ b/wiki/programming-language/Python/进阶/拓展模块/网络处理/urllib URL 处理模块.md @@ -2,12 +2,11 @@ title: urllib URL 处理模块 description: urllib URL 处理模块 keywords: -- python -- urllib + - python + - urllib tags: -- python -- 标准库 -sidebar_position: 1 + - python + - 标准库 author: 7Wate date: 2023-08-29 ---