如何将含边信息的TXT文件转换为指定格式的EdgeList?
解决边列表格式转换的问题
嘿,你的问题出在csv.reader的默认分隔符上!默认情况下,csv.reader会把逗号作为字段分隔符,但你的文本文件里是用制表符(\t)来分隔数字的,所以每一行的两个数字被当成了一个完整的字符串,才会得到像('0\t61',)这样的单元素元组。
这里有两种简单的修正方案:
方案一:指定csv.reader的分隔符
直接在初始化csv.reader时,指定delimiter='\t',同时把字符串转换成整数,这样就能得到你想要的格式:
import csv with open("path_to_file.txt", 'r') as data: # 指定制表符为分隔符 reader = csv.reader(data, delimiter='\t') # 将每一行的字符串转成整数,再打包成元组 elist = [tuple(map(int, row)) for row in reader] print(f"elist = {elist}")
方案二:不用csv模块,直接按行分割
如果你的文件里是用空格(或混合空格/制表符)分隔的,用split()方法会更灵活,不需要依赖csv模块:
elist = [] with open("path_to_file.txt", 'r') as f: for line in f: # 去掉首尾空白,按任意空白字符分割(支持空格、制表符等) parts = line.strip().split() # 每两个元素组成一个边的元组 for i in range(0, len(parts), 2): if i + 1 < len(parts): elist.append( (int(parts[i]), int(parts[i+1])) ) print(f"elist = {elist}")
运行任意一种方案,你都能得到目标格式:
elist = [(0,61), (0,33344), (0,33412), (0,36114), (0,37320), (0,37769), (0,37924)]
内容的提问来源于stack exchange,提问作者Pazu




