[英]Trying to convert txt.file with edges into edgelist
我有一個txt。 -file是這種格式:
0 61
0 33344
0 33412
0 36114
0 37320
0 37769
0 37924
這實際上是一個網絡邊緣列表,我想將其轉換為以下內容
elist = [(0,61), (0,33344), (0,33412), (0,36114), (0,37320), (0,37769), (0,37924)]
我的想法如下:
import csv
data = open("path_to_file.txt", 'r')
reader = csv.reader(data)
allRows = [tuple(row) for row in reader]
問題是我收到了這個:
[('0\t61',), ('0\t33344',), ('0\t33412',), ('0\t36114',), ('0\t37320',), ('0\t37769',), ('0\t37924',)]
我們該如何解決這個問題?
import csv
data = open("path_to_file.txt", 'r')
reader = csv.reader(data)
allRows = [tuple(row.split('\t')) for row in reader]
你很親密 而且,如果你寧願走那條路,那么幾乎可以肯定另一種方法是讓csv
在標簽上而不是逗號分開。
編輯:正如@roganjosh所說,你可以做到
import csv
data = open("path_to_file.txt", 'r')
reader = csv.reader(data, delimiter='\t'))
allRows = [tuple(row) for row in reader]
其他海報提到你可以使用轉義碼\\t
作為csv.reader()
的分隔符來解析額外的行。 這是事實,但從您的文件中可以看出,您的分隔符實際上是四個空格而不是一個制表符。 所以,這不起作用。
如果打印出[row for row in reader]
,則會發現相鄰元素之間的分隔未被保留:
[['0 61'],
['0 33344'],
['0 33412'],
['0 36114'],
['0 37320'],
['0 37769'],
['0 37924']]
因此,將其轉換為元組的努力將失敗,因為每行只有一個str
元素。 那么, reader
中的每一row
都是單個元素list
。 調用row[0]
將為您提供實際的字符串值: '0 61'
。
然后我們使用.split()
從這個字符串創建兩個元素:
In [47]: '0 61'.split()
Out[47]: ['0', '61']
現在,我們可以使用map
從這兩個新字符串創建整數:
In [49]: map(int,'0 61'.split())
Out[49]: [0, 61]
然后,我們轉換為元組並附加到列表,就像您上面所做的那樣,我們有一個可行的解決方案。
data = open("path_to_file.txt", 'r')
reader = csv.reader(data)
allRows = [tuple(map(int,row[0].split())) for row in reader]
In [43]: allRows
Out[43]:
[(0, 61),
(0, 33344),
(0, 33412),
(0, 36114),
(0, 37320),
(0, 37769),
(0, 37924)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.