对项目中的所有python文件应用“补丁”/更改?

时间:2014-07-09 09:06:30

标签: python project

我已经在Python(2.7.6)中启动了一个项目,我从不同的站点下载文件。 每个站点都有自己的类和一些不同文件中的函数。

所以我的工作目录看起来有点像这样:

/Sites
    - __init__.py
    - site1.py
    - site2.py
    - site3.py
    - ... 
    - siteN.py
/Tools
    - __init__.py
    - downloader.py
    - analyser.py
main.py

但对于大多数网站,我需要为urllib2使用不同的标头。通常我会这样做:

html = urllib2.urlopen(embed_url).readlines()

但有时我需要将其更改为:

headers = {'User-Agent' : 'Mozilla/5.0'}
req = urllib2.Request(embed_url, None, headers)
html = urllib2.urlopen(req).readlines()

但是每次为项目中的每个文件执行此操作时,似乎必须有更好的方法。我怎样才能为网站,工具中的所有文件以及main.py中的所有文件推广这个“补丁”,而不必在每个文件中重写它?

也许标题有点令人困惑,但我不知道如何解释它。

非常感谢!

1 个答案:

答案 0 :(得分:0)

当然假设我们总是谈论同一条线。

find -name *py -exec sed -i 's|html = urllib2.urlopen(embed_url).readlines()|headers =\n{'User-Agent' : 'Mozilla/5.0'}\nreq = urllib2.Request(embed_url, None, headers)\nhtml = urllib2.urlopen(req).readlines()\n|' {} +

我应该警告你,这行会改变你的文件,而不会要求你确认,所以你可以考虑在没有sed' s -i(就地)标志的情况下运行它,并确保你得到你的输出期待。