You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.8如何读取文本文件字符串并分配给数组变量

在Python 3.8中读取文本文件内容并分配到数组变量的正确实现

你的代码存在几个关键问题,导致无法正确将数据存入数组(Python中称为列表),以下是修正方案和优化建议:

原代码的核心问题

  1. 分隔符错误:line.split("\"\",\"\"")的分割逻辑完全错误,无法正确拆分带双引号的逗号分隔字段。
  2. 变量覆盖:初始化的列表(如usbNum=[])在循环中被直接赋值为字符串,导致列表被覆盖,无法累积数据。
  3. 未处理无效行:文件中的分隔线、空行会引发索引越界错误。
  4. 大文件兼容性:100万行数据需要高效、低内存的处理方式,手动分割容易出错且效率低。

推荐实现:使用CSV模块(适合大文件+标准格式)

你的文本文件是标准的带引号CSV格式,Python内置的csv模块能自动处理引号、分隔符,且内存效率高,非常适合百万级数据:

import csv

# 初始化用于存储数据的列表
usb_num = []
short_description = []
backup_type = []
date_taken = []

# 使用with语句自动管理文件资源,无需手动close
with open("myfile.txt", "r", encoding="utf-8") as file:
    # 配置CSV读取器:指定引号字符、分隔符,忽略字段前的空格
    reader = csv.reader(file, quotechar='"', delimiter=',', skipinitialspace=True)
    for row in reader:
        # 跳过无效行:分隔线或字段数量不对的行
        if len(row) != 4 or row[0].startswith("="):
            continue
        # 将数据添加到对应列表
        usb_num.append(row[0].upper())
        short_description.append(row[1])
        backup_type.append(row[2])
        date_taken.append(row[3])

# 验证输出结果
for u, dt, b in zip(usb_num, date_taken, backup_type):
    print(f"{u} taken {dt} for {b}.")

手动分割实现(仅用于理解逻辑,不推荐生产环境)

如果想手动处理字段分割,需修正分割逻辑并避免覆盖列表:

# 初始化存储列表
usb_num = []
short_description = []
backup_type = []
date_taken = []

with open("myfile.txt", "r", encoding="utf-8") as file:
    for line in file:
        line = line.strip()
        # 跳过空行和分隔线
        if not line or line.startswith("="):
            continue
        # 清理行首尾的双引号,再按'","'分割字段
        cleaned_line = line.strip('"')
        fields = cleaned_line.split('","')
        # 跳过格式错误的行
        if len(fields) != 4:
            continue
        # 将数据追加到列表(而非覆盖)
        usb_num.append(fields[0].upper())
        short_description.append(fields[1])
        backup_type.append(fields[2])
        date_taken.append(fields[3])

# 打印结果
for u, dt, b in zip(usb_num, date_taken, backup_type):
    print(f"{u} taken {dt} for {b}.")

关键注意事项

  • 始终使用with语句操作文件,避免忘记关闭文件导致资源泄漏。
  • 向列表添加数据必须用append()方法,不能直接赋值覆盖初始化的列表。
  • 处理大文件时,逐行读取(上述两种方式均为逐行处理),避免一次性加载所有数据到内存。
  • 必须过滤无效行,防止因格式错误引发索引越界异常。

内容的提问来源于stack exchange,提问作者MarsMan63

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:09:54