【发布时间】:2014-02-12 22:20:28
【问题描述】:
我有两个文件,我通过寻找正则表达式来解析一个文件以替换第二个文件中的字符串。第一个文件是一个 .csv 文件,其中包含第三个索引处的字符串。索引 0-2 只是添加到数据上。
文件 1 中的字符串如下所示:
"foo http://abc bar http://123."
...
...
在文件 2 中,只有一个 URL 列表,用于替换文件 1 中的 URL。
文件 2 如下所示:
"http://def"
"http://456"
...
...
我首先遍历文件 1,寻找 URL。当我找到一个 URL 时,我用文件 2 中的 URL 替换它,然后转到下一个 URL。这一切都是按顺序完成的,因此在替换文件 1 中的 URL 时,不会重复文件 2 中的 URL。
解析完成后得到的字符串应该是这样的:
"foo http://def bar http://456"
我的问题是,当使用 re.sub 执行替换时,我只能用文件 2 中的相同 URL 替换第一个 URL 或同时替换它们两个。例如,我的字符串最终看起来像这个:
"foo http://def bar http://def"
有没有办法可以使用 re.sub 替换第一个 URL,然后跟踪它在字符串中的位置,以便当它到达第二个 URL 时,它将用文件 2 中的相应 URL 替换它?
我写的代码如下:
shortened = open('shortenedURLs.txt','r')
linesReadfromFile = shortened.readlines()
newRetweet = open('new_Retweet.csv','w')
with open('tweets_nurl.csv','rb') as inputfile1:
read=csv.reader(inputfile1, delimiter=',')
a = 0
for row in read:
url = re.findall('https*://', row[3])
if url:
for i in xrange(len(url)):
currentLine=row[3].rstrip('\n')
if re.search('http://', row[3]):
iter = re.finditer(r'http://',row[3])
indices = [m.start(0) for m in iter]
print indices
currentLine=re.sub(r'http://[^\s]*', linesReadfromFile[a].rstrip('\n'), currentLine, count=1)
a=a+1
if re.search('https://',row[3]):
currentLine = re.sub(r'https://[^\s]*', linesReadfromFile[a].rstrip('\n'), currentLine)
a=a+1
newRetweet.write(row[0]+","+row[1]+","+row[2]+","+currentLine+'\n')
else:
newRetweet.write(','.join(row)+'\n')
shortened.close()
newRetweet.close()
“打印索引”告诉我在哪里找到匹配项,但我不确定如何利用它们来指定应该在哪里进行替换。
感谢您的帮助!
【问题讨论】: