0

背景:使用 Python 脚本,我从网站上抓取数据 (html) 并将这些数据放入 CSV 文档中。

此 CSV 文档如下所示:

Hong Kong;The Jardine Engineering Corporation Limited
Hong Kong;Towngas
Hong Kong;Tricor Services Limited
Hong Kong;UL International Limitied
Hong Kong;Urban Property Management Limited
Hong Kong;VTECH Corporate Services Ltd.
Vietnam;Cam Ranh Computer Co. Ltd
Vietnam;CFTP Company
Vietnam;Chevron Vietnam

第一栏:国家

第二列:名称

我的文件有超过 5000 行。

我需要将此 CSV 文档与另一个文档(来自相同的脚本,因此相同的结构)进行比较,以跟踪潜在的变化(如果我们有新的行,或者删除了一个)。 最好的办法是创建一个包含所有更改的文件,或在终端中打印它们。

*请记住,如果 CSV 文件(多行)发生变化,所有数据都会被转移 *

4

3 回答 3

1

使用GNUdiff。它是一个命令行工具,旨在完全按照您的意愿行事。提供 GUI 版本。

来自维基百科:

在计算中,diff是一种文件比较实用程序,可输出两个文件之间的差异。它通常用于显示文件的一个版本与同一文件的旧版本之间的更改。Diff 显示对文本文件的每行所做的更改。现代实现也支持二进制文件。 [1] 输出称为“差异”或补丁,因为输出可以与 Unix 程序补丁一起应用。类似文件比较实用程序的输出也称为“差异”;就像使用“grep”这个词来描述搜索行为一样,diff 这个词在行话中被用作计算任何差异的动词。[需要引用]

让您从怀疑中受益,您可能尝试在 Google 上搜索“从 Python 中查找两个 csv 文件之间的差异”之类的内容。如果您忘记了文件是csv格式化的,或者它们是使用 Python 创建的,那么搜索find differences between text filesdiff为您找到 GNU。


编辑:

添加一行对 GNU 没有问题diff。它会找到改变的那一行,并告诉你。

例子:

lws@helios:~$ cat file1
alpha
beta
charlie
delta
echo
foxtrot

lws@helios:~$ cat file2
alpha
beta
charlie
CHAMELEON
delta
echo
foxtrot

lws@helios:~$ diff file1 file2
3a4
> CHAMELEON
于 2012-04-10T11:20:55.663 回答
1

欢迎来到 StackOverflow。:)

您的问题归结为在两个列表之间进行比较。这可以通过difflib在 Python 中使用。

手册中的这个例子应该可以帮助你:

>>> diff = ndiff('one\ntwo\nthree\n'.splitlines(1),
...              'ore\ntree\nemu\n'.splitlines(1))
>>> diff = list(diff) # materialize the generated delta into a list
>>> print ''.join(restore(diff, 1)),
one
two
three
>>> print ''.join(restore(diff, 2)),
ore
tree
emu

打印对文件的更改:

>>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
>>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
>>> for line in unified_diff(s1, s2, fromfile='before.py', tofile='after.py'):
...     sys.stdout.write(line)   
--- before.py
+++ after.py
@@ -1,4 +1,4 @@
-bacon
-eggs
-ham
+python
+eggy
+hamster
 guido
于 2012-04-10T11:28:42.143 回答
0
OLD_PATH = r'/Users/abelrossignol/Desktop/1.csv'
NEW_PATH = r'/Users/abelrossignol/Desktop/2.csv'

out = open("Out.txt", 'w')

old = open(OLD_PATH, 'r')
old_lines = list(old)
old.close()

new = open(NEW_PATH, 'r')
new_lines = list(new)
new.close()

for line in unified_diff(old_lines, new_lines, fromfile=OLD_PATH, tofile=NEW_PATH):
    out.write(line)
    print("Writter")

似乎工作完美。我仍在尝试理解 Out.txt 的结构,但最困难的已经完成。

非常感谢您的帮助 ;-)

我希望有一天这可能对其他人有所帮助。

于 2012-04-11T02:02:30.913 回答