37,721
社区成员
发帖
与我相关
我的任务
分享
with open(r'info.txt','r') as f:
lists = f.read().split('\n[')
#当我看到这个txt时 就想到了二维数组 因为很好遍历和比较
cribe_list = lists[1].replace('\n',' ').split(' ')
cribe_2d = [['*' for j in range(3)]for i in range(int((len(cribe_list)-4)/3))]
num = 0
j = 0
for i in cribe_list[4:]:
if num == 3:
num = 0
j+=1
cribe_2d[j][num] = i
num +=1
print(cribe_2d)
detail_list = lists[2].replace('\n',' ').split(' ')
detail_2d = [['*' for j in range(4)]for i in range(int((len(detail_list)-5)/4))]
num = 0
j = 0
for i in detail_list[5:]:
if num == 4:
num = 0
j+=1
detail_2d[j][num] = i
num +=1
print(detail_2d)
#思路:其实就是直接比较 先找第一个有了再找第二个 没有什么好说的。。。
new_list = []
for i in range(len(cribe_2d)):
for j in range(len(detail_2d)):
# print("i:",i,cribe_2d[i][1],"j:",j,detail_2d[j][1])
if cribe_2d[i][1] == detail_2d[j][1]:
new_id = cribe_2d[i][0]
new_node2 = detail_2d[j][2]
for n in range(len(detail_2d)):
# print("i:",i,"n:",n)
if cribe_2d[i][2] == detail_2d[n][2]:
new_length = int(detail_2d[j][3])+int(detail_2d[n][3])
new_node1 = detail_2d[n][1]
# print(new_id,new_node1,new_node2,new_length)
new_list.append([new_id,new_node1,new_node2,str(new_length)])
#删除行的时候需要比较哪行在前,不然会删错。
if(j<n):
del detail_2d[j]
del detail_2d[n-1]
else:
del detail_2d[n]
del detail_2d[j-1]
break
break
fina_list = new_list+detail_2d
fina_text = str(fina_list).replace('\', \'',' ').replace('[[\'',"").replace('\']]',"").replace(r"'], ['","\n")
print(fina_text)
with open(r'info.txt','r') as f1:
lines = f1.readlines()
with open(r'info2.txt','w') as f2:
for line in lines:
#当读到这行中有p时跳过
if 'p' in line:
continue
f2.write(line)
f2.write(fina_text)
import csv
from operator import itemgetter
from collections import OrderedDict
with open('cribe.txt') as cf, open('detail.txt') as df:
cribe_list = list(csv.reader(cf, delimiter='\t'))[1:]
detail_list = list(csv.reader(df, delimiter='\t'))[1:]
node1_index = dict(map(itemgetter(1,0),cribe_list))
node2_index = dict(map(itemgetter(2,0),cribe_list))
print(node1_index)
print(node2_index)
result = OrderedDict()
for line in detail_list:
node_id = node1_index.get(line[1], False)
if node_id:
result.setdefault(node_id, {}).update({'n1':line[2],'l1':int(line[-1])})
node_id = node2_index.get(line[2], False)
if node_id:
result.setdefault(node_id, {}).update({'n2':line[1],'l2':int(line[-1])})
for node_id, values in result.items():
print(node_id, values['n1'], values['n2'], values['l1']+values['l2'])
======================= RESTART: D:/tmp/handlefile.py =======================
{'1-A': '110', '2-A': '111', '3-A': '112', '4-A': '113'}
{'1-B': '110', '2-B': '111', '3-B': '112', '4-B': '113'}
110 2110 2115 600
111 2132 2001 300
import csv
import sqlite3
with open('cribe.txt') as cf, open('detail.txt') as df:
cribe_list = list(csv.reader(cf, delimiter='\t'))[1:]
detail_list = list(csv.reader(df, delimiter='\t'))[1:]
con = sqlite3.connect(":memory:")
# 使用:memory:标识,数据库放在内存里,不产生磁盘文件。
cur = con.cursor()
cur.execute('CREATE TABLE cribe(id INT PRIMARY KEY NOT NULL, node1 TEXT, node2 TEXT);')
cur.execute('CREATE TABLE detail(id TEXT, node1 TEXT, node2 TEXT, length INT);')
cur.executemany('INSERT INTO cribe(id, node1, node2) VALUES(?,?,?);', cribe_list)
cur.executemany('INSERT INTO detail(id, node1, node2, length) VALUES(?,?,?,?);', detail_list)
rows = cur.execute("""SELECT N1.id, N2.node1, N1.node2, N1.length + N2.length AS length
FROM
(SELECT C.id, D.node2 AS node2, D.length FROM detail AS D INNER JOIN cribe AS C ON C.node1 = D.node1) AS N1
INNER JOIN
(SELECT C.id, D.node1 AS node1, D.length FROM detail AS D INNER JOIN cribe AS C ON C.node2 = D.node2) AS N2
ON N1.id = N2.id;""")
for row in rows:
print(row)
(110, '2115', '2110', 600)
(111, '2001', '2132', 300)