如何将data列表对应数组写入同名序号的TXT文件?
问题与解决方案:将数组对应写入序号匹配的文本文件
原问题
我在文件夹中有多个文本文件,例如'1.txt'、'2.txt'等。我有一个名为data的列表,其中包含不同的数组,需要将data[0]写入'1.txt'、data[1]写入'2.txt',以此类推。目前我编写了如下代码:
for files in folder: for i in range(0,len(data)): data = zip(data[i]) with open (files, "w") as f: writer = csv.writer(f,delimiter='\t') writer.writerows(data) quit()但运行后每个文本文件都只写入了最后一个数组的内容,因为我尚未实现文件与数组的对应循环。请问如何选择序号为i的文件,以写入对应的data[i]?我尝试了多种方法但均报错,恳请帮助。
问题分析
你的代码逻辑有几个关键问题:
- 双层循环逻辑颠倒:先遍历文件再遍历data索引,导致每个文件被反复写入所有data元素,最终只保留最后一次写入的内容。
- 覆盖原数据变量:
data = zip(data[i])直接把原本的列表替换成了zip对象,后续循环完全无法获取原始数据。 - 提前终止程序:
quit()会在第一次循环就直接终止程序,后续逻辑根本没机会执行。
解决方案
下面给出两种针对性的修复方案,你可以根据实际情况选择:
方案一:匹配已有文件的序号写入
如果文件夹里已经存在1.txt、2.txt这类文件,我们可以提取文件名中的数字,和data的索引对应起来:
import csv import os # 替换成你的文件夹路径 folder_path = "./your_folder" # 筛选出所有txt文件,并按文件名中的数字排序 sorted_files = sorted( [f for f in os.listdir(folder_path) if f.endswith(".txt")], key=lambda x: int(x.split(".")[0]) # 提取文件名中的数字作为排序依据 ) # 先检查文件数量和data长度是否匹配 if len(sorted_files) != len(data): print("⚠️ 警告:文件数量与data数组数量不匹配!") # 遍历文件和对应的data元素 for file_idx, filename in enumerate(sorted_files): # 防止索引超出data的范围 if file_idx >= len(data): break full_file_path = os.path.join(folder_path, filename) # 处理data元素:如果是一维数组,转成csv可写入的行格式;二维数组可直接使用 current_data = data[file_idx] rows = zip([current_data]) if isinstance(current_data, (list, tuple)) else current_data with open(full_file_path, "w", newline="") as f: writer = csv.writer(f, delimiter="\t") writer.writerows(rows)
方案二:直接生成对应序号的文件写入
如果文件还未创建,或者你可以直接生成文件名,这种方式更简洁:
import csv # 遍历data的每个元素,按索引+1生成对应的文件名 for idx, item in enumerate(data): # data[0]对应1.txt,所以文件名用idx+1 filename = f"{idx + 1}.txt" # 处理数据格式 rows = zip([item]) if isinstance(item, (list, tuple)) else item with open(filename, "w", newline="") as f: writer = csv.writer(f, delimiter="\t") writer.writerows(rows)
内容的提问来源于stack exchange,提问作者Idw
相关产品推荐
相关产品推荐

