我有一个csv文件,我想对其进行修改。我想在每行包含字符“ M06”的行之前添加“ M19”的新行。
之前:
T40400010
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)
重整后:
T40400010
M19
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)
我正计划在python中使用正则表达式解决此问题,但我也愿意接受其他解决方案。谢谢。
答案 0 :(得分:3)
您可以这样做:
import re
with open(fn) as f:
for line in f:
if re.search(r'^M06$', line):
print('M19')
print(line)
打印:
T40400010
M19
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)
如果您想要M19
之后的M06
,只需将print(line)
移到if re.search(r'^M06$', line):
上方而不是下方。
如果您希望具有“编辑”文件的效果,并且文件大小合理(即容易容纳在内存中),则可以执行以下操作:
import re
with open(fn) as f:
data=re.sub(r'^(M06)$', r'M19\n\1', f.read(), flags=re.M)
with open(fn, 'w') as f:
f.write(data)
如果文件的大小超出了内存的大小,则可以执行以下操作:
import re, tempfile, shutil
with open(fn, 'r') as f_in, tempfile.NamedTemporaryFile(mode='w', delete=False) as f_out:
tmp_name=f_out.name
for line in f_in:
if re.search(r'^M06$', line):
print('M19\n',end='', file=f_out)
print(line,end='', file=f_out)
shutil.move(tmp_name, fn)
答案 1 :(得分:1)
您可以使用Notepad ++内置搜索+替换对话框(对我来说是Strg + H)。
搜索正则表达式^M06$
并将其替换为M19\r\nM06
(如果在unix上,\n
是Windows,则使用\r\n
)。
确保选择Regular expression
选项。
如果您真的想在两者之间使用换行符,请在\r\n
上加倍
答案 2 :(得分:0)
您可以在Notepad ++中通过搜索以下表达式来做到这一点:
^(M06)$
并替换为:
M19\n\1
\n
字符代表换行,\1
代表对正则表达式括号中“ M06”值的引用。括号中的所有内容(在本例中为“ M06”)都将被捕获,并以\ 1返回。
之所以使用对捕获组的引用而不是仅将其替换为“ M19 \ nM06”的原因是,因为您可能希望更改表达式以查找更多数据。例如,如果M06行上还有其他数据,则您可能希望查找如下表达式:
^(.*M06.*)$
编辑:帕特里克击败了我。我只剩下添加捕获组了。