杰瑞科技汇

Python读取txt文件后如何用split分割数据?

核心概念

  1. 读取文件: 使用 open() 函数打开文件,得到一个文件对象。
  2. : 使用文件对象的 .read() 方法读取所有内容,或者 .readlines() 方法按行读取。
  3. 分割字符串: 使用字符串的 .split() 方法,根据指定的分隔符(默认是空格)将一个字符串拆分成一个列表。

基础用法:按行读取并分割

这是最常见的情况:文件中的每一行代表一条记录,记录中的数据由空格、逗号等符号分隔。

Python读取txt文件后如何用split分割数据?-图1
(图片来源网络,侵删)

假设我们有一个名为 data.txt 的文件,内容如下:

data.txt

apple 10 red
banana 20 yellow
orange 15 orange
grape 5 purple

示例代码

# 1. 打开文件
# 使用 'with' 语句可以确保文件在操作完成后自动关闭,是推荐的做法。
# 'r' 表示读取模式 (read)。
with open('data.txt', 'r', encoding='utf-8') as file:
    # 2. 逐行读取
    # file.readlines() 会返回一个列表,每个元素是文件中的一行(包括末尾的换行符 \n)
    lines = file.readlines()
# 3. 遍历每一行并进行分割
for line in lines:
    # line.strip() 可以移除字符串首尾的空白字符(包括 \n, \t, 空格等)
    # 这一步很重要,可以避免分割结果中出现空字符串
    parts = line.strip().split()
    # parts 是一个列表,['apple', '10', 'red']
    print(f"分割后的列表: {parts}")
    # 你可以方便地访问每个部分
    if len(parts) >= 3:
        fruit = parts[0]
        quantity = parts[1]
        color = parts[2]
        print(f"水果: {fruit}, 数量: {quantity}, 颜色: {color}")
    print("-" * 20)

代码解释

  1. with open('data.txt', 'r', encoding='utf-8') as file::

    • open('data.txt', 'r'): 打开 data.txt 文件,准备进行读取 ('r')。
    • encoding='utf-8': 指定文件编码,这对于处理包含非英文字符的文件至关重要,可以避免乱码。
    • as file: 将打开的文件对象赋值给变量 file
    • with ... as ...: 这是一个上下文管理器,它会自动处理文件的关闭,即使发生错误也能保证文件被正确关闭。
  2. lines = file.readlines():

    Python读取txt文件后如何用split分割数据?-图2
    (图片来源网络,侵删)
    • 读取文件的所有行,并将它们作为一个列表返回,列表中的每个元素都包含行末的换行符 \n
  3. for line in lines::

    • 遍历 lines 列表中的每一行。
  4. line.strip():

    • 移除 line 字符串开头和结尾的空白字符,主要是 \n (换行符),如果不做这一步,split() 的结果可能会包含空字符串,['apple', '10', 'red', '']
  5. .split():

    • 这是核心的分割方法,当不提供任何参数时,它会根据任意空白字符(空格、制表符 \t、换行符等)进行分割,并自动忽略连续的空白符。
    • 它返回一个列表,'apple 10 red'.split() 会得到 ['apple', '10', 'red']

进阶用法:指定分隔符

很多时候,数据是用逗号、分号或其他特定符号分隔的,这时,你需要向 split() 方法传入分隔符作为参数。

Python读取txt文件后如何用split分割数据?-图3
(图片来源网络,侵删)

假设我们有一个名为 csv_data.txt 的文件,内容如下:

csv_data.txt

ID,Name,Score
1,Alice,95
2,Bob,88
3,Charlie,76

示例代码

with open('csv_data.txt', 'r', encoding='utf-8') as file:
    # 跳过表头
    header = file.readline()
    print(f"表头: {header.strip()}")
    for line in file:
        # 使用逗号作为分隔符
        parts = line.strip().split(',')
        # parts 现在是 ['1', 'Alice', '95'] 这样的列表
        student_id = parts[0]
        name = parts[1]
        score = parts[2]
        print(f"学号: {student_id}, 姓名: {name}, 分数: {score}")

代码解释

  • line.strip().split(','):
    • 这次我们传入了 作为参数,告诉 split() 方法请用逗号来分割字符串。
    • 这对于处理 CSV 格式的文件非常有用。

更高效的方法:直接迭代文件对象

对于非常大的文件,使用 file.readlines() 会一次性将所有内容读入内存,可能导致内存不足,更高效的方法是直接迭代文件对象,Python 会自动逐行读取。

print("\n--- 使用更高效的方法 ---")
with open('data.txt', 'r', encoding='utf-8') as file:
    # 直接 for 循环 file 对象,它会自动逐行迭代
    for line in file:
        parts = line.strip().split()
        if parts:
            fruit = parts[0]
            quantity = parts[1]
            color = parts[2]
            print(f"高效处理 - 水果: {fruit}, 数量: {quantity}, 颜色: {color}")

这种方法在内存使用上更优,是处理大文件的推荐方式。


总结与最佳实践

场景 推荐方法 说明
按行处理 with open(...) as file:
for line in file:
最佳实践,内存高效,代码简洁。
一次性读取所有行 with open(...) as file:
lines = file.readlines()
适合小文件,方便随机访问某一行。
分割符是空白符 line.strip().split() 默认行为,用空格、Tab等分割。
分割符是特定字符 line.strip().split(',') 用逗号、分号等指定的单个字符分割。
分割符是多个字符 line.strip().split('::') 可以用多字符作为分隔符。
处理CSV文件 import csv
with open(..., 'r') as f:
reader = csv.reader(f)
for row in reader:
强烈推荐,Python 的 csv 模块能更好地处理CSV文件的各种边缘情况(如引号、转义等)。

核心要点回顾:

  1. 始终使用 with open(...) 来管理文件。
  2. 始终指定 encoding,特别是 utf-8
  3. 使用 line.strip() 来清理每行的首尾空白。
  4. 根据数据格式选择 split() 的参数,无参用于空白符,有参用于特定分隔符。
  5. 处理大文件时,直接迭代文件对象,而不是使用 readlines()
分享:
扫描分享到社交APP
上一篇
下一篇