【发布时间】:2022-01-12 23:10:45
【问题描述】:
我需要帮助来制作下面的 sn-p。我需要合并两个文件并在匹配的行上执行计算
我有包含旧数据的 oldFile.txt 和包含更新数据集的 newFile.txt。
我需要根据 newFile.txt 中的数据更新 oldFile.txt 并计算百分比变化。任何想法都会非常有帮助。提前致谢
from collections import defaultdict
num = 0
data=defaultdict(int)
with open("newFile.txt", encoding='utf8', errors='ignore') as f:
for line in f:
grp, pname, cnt, cat = line.split(maxsplit=3)
data[(pname.strip(),cat.replace('\n','').strip(),grp,cat)]+=int(cnt)
sorteddata = sorted([[k[0],v,k[1],k[2]] for k,v in data.items()], key=lambda x:x[1], reverse=True)
for subl in sorteddata[:10]:
num += 1
line = " ".join(map(str, subl))
print ("{:>5} -> {:>}".format(str(num), line))
with open("oldFile.txt", 'a', encoding='utf8', errors='ignore') as l:
l.write(" ".join(map(str, subl)) + '\n')
oldFile.txt
#col1 #col2 #col3 #col4
1,396 c15e89f2149bcc0cbd5fb204 4 HUH_Token (HUH)
279 9e4d81c8fc15870b15aef8dc 3 BABY BNB (BBNB)
231 31b5c07636dab8f0909dbd2d 6 Buff Unicorn (BUFFUN...)
438 1c6bc8e962427deb4106ae06 8 Charge (Charge)
2,739 6ea059a29eccecee4e250414 2 MAXIMACASH (MAXCAS...)
newFile.txt #-- 更新数据,增加 oldFile.txt 中没有的行
#col1 #col2 #col3 #col4
8,739 6ea059a29eccecee4e250414 60 MAXIMACASH (MAXCAS...)
138 1c6bc8e962427deb4106ae06 50 Charge (Charge)
860 31b5c07636dab8f0909dbd2d 40 Buff Unicorn (BUFFUN...)
200 9e4d81c8fc15870b15aef8dc 30 BABY BNB (BBNB) #-- not found in the oldFile.txt
20 5esdsds2sd15870b15aef8dc 30 CharliesAngel (CA)
1,560 c15e89f2149bcc0cbd5fb204 20 HUH_Token (HUH)
需要改进:#-- 使用附加列 (col5, col6) 并根据 (col3) 值排序
#col1 #col2 #col3 #col4 #col5 (oldFile-newFile) #col6 (oldFile-newFile)
8,739 6ea059a29eccecee4e250414 62 MAXIMACASH (MAXCAS...) 2900.00 % (col3 2-60) 219.06 % (col1 2,739-8,739)
138 1c6bc8e962427deb4106ae06 58 Charge (Charge) 625.00 % (col3 8-50) -68.49 % (col1 438-138)
860 31b5c07636dab8f0909dbd2d 46 Buff Unicorn (BUFFUN...) 566.67 % (col3 6-40) 272.29 % (col1 231-860)
200 9e4d81c8fc15870b15aef8dc 33 BABY BNB (BBNB) 900.00 % (col3 3-30) -28.32 % (col1 279-200)
20 5esdsds2sd15870b15aef8dc 30 CharliesAngel (CA) 0.00 % (col3 0-30) 20.00 % (col1 0-20)
1,560 c15e89f2149bcc0cbd5fb204 24 HUH_Token (HUH) 400.00 % (col3 4-20) 11.75 % (col1 1,396-1,560)
【问题讨论】:
-
你做了什么来尝试做出这些改变?
-
如果您只读取文件,我建议您在调用
open时添加'r',如果您只是写入文件,请添加'w'。这将保护您免受错误的影响,例如意外损坏您想要阅读的文件;这将使您的代码更容易理解,因为无论您是在阅读还是在写作,都会立即显而易见。 -
我认为你应该把阅读和写作完全抛开。除非您在这些方面遇到问题,否则请将您的问题简化为核心问题 - 获取两个多维数组并将其转换为单个多维数组。文件读/写很简单。根据您的实际数据转换,您尝试将两者合并吗?
-
@rbutrnz 所以你以后不要在社交上失礼......“IT”通常不会指代与“程序员”相同的技能。
-
虽然如果你的同事知道你是一个“程序员”,你肯定会成为事实上的“IT人”。