/ / In python suche Strings mit regulärem Ausdruck und ersetze sie mit einem anderen - python, csv

Suchen Sie in python Strings mit regulärem Ausdruck und ersetzen Sie sie durch einen anderen - python, csv

Ich habe eine db.sql Datei, die viele URLs wie folgt enthält.

....<td class="column-1"><a href="http://geni.us/4Lk5" rel=nofollow"><img src="http://www.toprateten.com/wp-content/uploads/2016/08/25460A-Panini-Press-Gourmet-Sandwich-Maker.jpg " alt="25460A Panini Press Gourmet Sandwich Maker" height="100" width="100"></a></td><td class="column-2"><a href="http://geni.us/4Lk5" rel="nofollow">25460A Panini Press Gourmet Sandwich Maker</a></td><td class....

Wie Sie sehen können, gibt es http://geni.us/4Lk5 in der Datei.

Ich habe eine andere product.csv Dateien, die ID enthält (wie 4LK5 oben) und Amazon Produkt URL wie folgt.

4Lk5    8738    8/16/2016 0:20  https://www.amazon.com/gp/product/B00IWOJRSM/ref=as_li_qf_sp_asin_il_tl?ie=UTF8
Jx9Aj2  8738    8/22/2016 20:16 https://www.amazon.com/gp/product/B007EUSL5U/ref=as_li_qf_sp_asin_il_tl?ie=UTF8
9sl2    8738    8/22/2016 20:18 https://www.amazon.com/gp/product/B00C3GQGVG/ref=as_li_qf_sp_asin_il_tl?ie=UTF8

Wie Sie sehen können, gibt es 4LK5, die mit der Produkt-URL von Amazon übereinstimmt.

Ich habe bereits die CSV-Datei gelesen und nur ID und Amazon Produkt-URL mit Python auswählen.

def openFile(filename, mode):
index = 0
result = []
with open(filename, mode) as csvfile:
spamreader = csv.reader(csvfile, delimiter = ",", quotechar = "n")
for row in spamreader:
result.append({
"genu_id": row[0],
"amazon_url": row[3]
});
return result

Ich muss Code hinzufügen, um die passende URL mit genu_id in db.sql zu suchen und durch amazon_url zu ersetzen, wie im obigen Code beschrieben.

Bitte hilf mir.

Antworten:

1 für die Antwort № 1

Wenn Sie eine solche vordefinierte Struktur haben, brauchen Sie keine Regex - wenn alle Links die Form haben http://geni.us/<geni_id> Sie können es mit einfachem tun str.replace() indem Sie jede Zeile Ihrer CSV-Datei lesen und die Übereinstimmungen in Ihrer SQL-Datei ersetzen. Etwas wie:

import csv

with open("product.csv", "rb") as source, open("db.sql", "r+") as target:  # open the files
sql_contents = target.read()  # read the SQL file contents
reader = csv.reader(source, delimiter="t")  # build a CSV reader, tab as a delimiter
for row in reader:  # read the CSV line by line
# replace any match of http://geni.us/<first_column> with third column"s value
sql_contents = sql_contents.replace("http://geni.us/{}".format(row[0]), row[3])
target.seek(0)  # seek back to the start of your SQL file
target.truncate()  # truncate the rest
target.write(sql_contents)  # write back the changed content
# ...
# Profit? :D

Wenn Ihre ursprüngliche CSV-Datei durch Kommas getrennt ist, ersetzen Sie das Trennzeichen natürlich in der csv.reader() Anruf - der hier dargestellte scheint tabulatorgetrennt zu sein.