我有一个csv文件,我想要修改它。我喜欢在包含"M06“字符的每一行之前添加一行"M19”。
之前:
T40400010
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)改革后:
T40400010
M19
M06
(T40400010, 5.0MM SOLID CARBIDE REAMER - 6FL)我计划在python中使用正则表达式来解决这个问题,但我也对其他解决方案持开放态度。谢谢。
发布于 2018-09-14 02:03:34
您可以执行以下操作:
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)如果您想在M06之后使用M19,只需将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) 发布于 2018-09-14 02:04:20
你可以使用Notepad++内置的search+replace对话框(我用Strg+H)。
搜索正则表达式^M06$并将其替换为M19\r\nM06 (如果在unix上,则使用\n,\r\n为windows)。
确保选择Regular expression选项。
如果你真的想在这两者之间加上一个换行符,那就在\r\n上加倍

发布于 2018-09-14 02:05:45
您可以在Notepad++中使用以下表达式进行搜索来执行此操作:
^(M06)$并将其替换为:
M19\n\1\n字符表示新行,\1表示对正则表达式括号中的"M06“值的引用。括号中的任何内容(在本例中为"M06")都将被捕获,并以\1的形式返回。
我之所以使用对捕获组的引用,而不是仅仅将其替换为"M19\nM06",是因为您可能希望更改表达式以查找更多数据。例如,如果M06行上有其他数据,则可能需要查找如下表达式:
^(.*M06.*)$编辑:帕特里克先我一步回答。我把这个留下来,只是为了添加捕获组。
https://stackoverflow.com/questions/52319319
复制相似问题