使用csv模块导入文件遇问题:如何将文本文件按行交替转为字典?
解决交替行文本转字典的问题
嘿,我懂你现在卡在哪了——已经顺利把books.txt转成列表,但第二个文件要按「第1行是键、第2行是值,第3行又当键」的交替规则转成字典,试了各种方法都没达到预期效果对吧?咱们来一步步搞定这个问题。
首先,先补全你处理books.txt的代码,然后重点解决第二个文件的字典转换:
方案1:直接读取文本行(更简单,适合纯每行单内容的文件)
如果你的第二个文件是纯文本,每行只有一个内容(没有逗号分隔的CSV格式),直接用普通文件读取就足够,不需要依赖csv模块:
import csv def importer(): # 处理第一个文件:books.txt转列表 with open('books.txt', newline='') as inputfile: reader = csv.reader(inputfile) books = list(reader) # 将csv读取器转换为列表 # 处理第二个文件:交替行转字典 book_dict = {} with open('your_second_file.txt', 'r', encoding='utf-8') as f: # 读取所有行,清理空行和首尾空格 cleaned_lines = [line.strip() for line in f if line.strip()] # 两两配对:偶数索引行当键,下一行当值 for i in range(0, len(cleaned_lines), 2): # 防止文件行数为奇数时最后一个键没有对应值 if i + 1 < len(cleaned_lines): book_dict[cleaned_lines[i]] = cleaned_lines[i+1] return books, book_dict
方案2:用csv模块处理(适合标准CSV格式文件)
如果你的第二个文件是标准CSV(比如每行可能有逗号分隔,但你只需要每行的第一个元素作为键/值),可以用csv模块读取后再处理:
import csv def importer(): # 处理第一个文件:books.txt转列表 with open('books.txt', newline='') as inputfile: reader = csv.reader(inputfile) books = list(reader) # 用csv模块处理第二个文件 book_dict = {} with open('your_second_file.txt', newline='', encoding='utf-8') as inputfile: reader = csv.reader(inputfile) cleaned_lines = [] for row in reader: # 跳过空行,取每行第一个元素并清理空格 if row: cleaned_lines.append(row[0].strip()) # 同样两两配对生成字典 for i in range(0, len(cleaned_lines), 2): if i + 1 < len(cleaned_lines): book_dict[cleaned_lines[i]] = cleaned_lines[i+1] return books, book_dict
关键说明
cleaned_lines的作用是过滤掉空行和每行的首尾空格,避免键值对里出现多余的空白字符;range(0, len(cleaned_lines), 2)让我们每次跳2行,刚好取到第1、3、5...行作为键,对应的下一行作为值;- 加了
if i+1 < len(cleaned_lines)的判断,是为了防止文件最后一行是单独的键(行数为奇数),导致索引越界报错。
内容的提问来源于stack exchange,提问作者user3820095
相关产品推荐
相关产品推荐

