我有一个CSV文件users.csv
,其中包含用户名,用户ID和其他数据的列表:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"Paul McCartny", 30923833, "left", "black"
"Ringo Starr", 77392318, "right", "blue"
"George Harrison", 72349482, "left", "green"
在另一个文件中,toremove.txt
我有一个用户ID列表:
30923833
77392318
有没有巧妙,有效的方法从users.csv
文件中删除包含ID的所有行toremove.txt
?我编写了一个简单的Python应用程序来解析这两个文件,并仅将在中找不到的那些行写入一个新文件toremove.txt
,但是这非常慢。也许有些sed
或awk
魔术可以帮助这里?
考虑以上示例,这是理想的结果:
username, userid, sidebar_side, sidebar_colour
"John Lennon", 90123412, "left", "blue"
"George Harrison", 72349482, "left", "green"
也许您应该共享您的python脚本。我怀疑那里出了点问题,例如O(N²),尽管如果要保留和删除数百万条记录,魔术不会有太大帮助。
—
安赫尔
该脚本实际上是O(n <sup> 2 </ sup>):n用于
—
dotancohen 2014年
users.csv
文件的行,n用于的行toremove.txt
。我不太确定如何以较低的复杂度进行操作。要点是:for u in users: if not any(toremove in u): outputfile.write(u)
。我可以将其发布到代码审查。
我会读
—
安赫尔
toremove.txt
,将条目保存为键。迭代users.csv,打印id不在字典中的那些文件。你得到O(n)的处理两者toremove.txt
和users.csv
,以及O(n)的内存使用toremove.txt
(这可能是比较小)
@Ángel:是的,这正是脚本的工作原理!
—
dotancohen 2014年
检查关键字是否存在于字典中,等同于哈希表检查,即(几乎)O(1)。在另一方面,如果它需要迭代的项目去掉,这是(M)O
—
安赫尔