不同行上的文本替换

时间:2016-03-28 22:03:34

标签: python regex awk

我在文件中有多个条目,如下所述。

 "Item_1";"Item_1";"Products///Item///ABC///XYZ";"Item_1.jpg}";"";"Buy item
 <br><strong>Items</strong>
 <br><strong>Time</strong>";"";"";"";"";"";"Category: M[Item]";"";"";"Y";"N";"N";"None";""

 "Item_2";....

在上面的文字中,&#34;购买项目&#34;之后有一个换行符。在第一行&amp;在&#39; / strong&gt;&#39;之后在第二行。

我想要做的改变是 -

1. Replace Products///Item///ABC///XYZ with Products///ABC///XYZ
2. Replace "Category: M[Item]" with "Category: M[ABC]"
3. In case if Entry 1 is Products///Item///ABC or Products///ABC, I dont want to change "Category: M[Item]" with "Category: M[ABC]", just change Products///Item///ABC to Products///ABC

我试图逐行读取整个文件。然后由&#39; ///&#39;分开存储条目数量和存储第三个条目。但是这会产生问题,因为我有多个换行符。

使用正则表达式还是其他方法有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

像@Casimir建议的那样,您可以使用csv模块来解析您的文件(因为它会处理换行符),就像这样

import csv

with open(your_filename) as f:
    reader = csv.reader(f, delimeter=';', quotechar='"')

rows = list(reader)    

然后对解析后的结果做你想做的事情(我不太确定你想要在这里实现什么,如果那不是你想要的那样评论)

for row in rows:
    if 'Products///Item///ABC///XY' in row:
        index = row.index('Products///Item///ABC///XY')
        row[index] = 'Products///ABC///XYZ'
        continue # If we replaced the first thing, skip to next row
    elif 'Category: M[Item]' in row:
        index = row.index('Category: M[Item]')
        row[index] = 'Category: M[ABC]'