【发布时间】:2015-04-26 02:36:24
【问题描述】:
我需要通过 Python 调用 Sed。我尝试了this问题的答案,但它不起作用。
我的代码是(是的,该文件没有扩展名,它在使用 putty 时有效):
filename = '/home/user1/file'
subprocess.call(["sed","-i",r"$'s/[][]//g;s/,/\\\n/g'",filename])
有人可以看看出了什么问题吗?脚本执行,但只是跳过子进程调用。
好的,所以我使用 Python re 模块进行了尝试,这是我的代码:
filename = '/home/user/file'
filenametemp = '/home/user/temp'
file = open(filename, "r")
temp = open(filenametemp,"w+")
text = file.read()
text = re.sub(r'\[|\]',r'',text)
text = re.sub(r',',r'\n', text)
print text
temp.write(text)
header_row=['H1','H2','H3']
data = pd.read_csv(filenametemp, sep= ';',skipinitialspace=1, names=header_row)
文件“temp”现在的布局正确,但 Pandas 在打开此文件时会创建一个空数据框。 但是,如果我注释掉:
#temp = open(filenametemp,"w+")
#temp.write(text)
然后再次运行脚本,所有数据都已正确加载到数据框中。
有人可以解释为什么会发生这种情况并有解决方案吗?
原来我必须先关闭文件才能使用它。因此,虽然它不是通过对 sed 的子进程调用完成的,但它返回了正确的解决方案:
filename = '/home/user/file'
filenametemp = '/home/user/temp'
file = open(filename, "r")
temp = open(filenametemp,"w+")
text = file.read()
text = re.sub(r'\[|\]',r'',text)
text = re.sub(r',',r'\n', text)
print text
temp.write(text)
temp.close()
header_row=['H1','H2','H3']
data = pd.read_csv(filenametemp, sep= ';',skipinitialspace=1, names=header_row)
【问题讨论】:
-
您是否错过了以这种方式运行时不需要单引号的一点,因为您没有使用外壳?如果您需要将转义序列转换为文字字符(并且您可能不需要),那么我认为如果您不将它们从 python 中转义,则不使用原始字符串将为您做到这一点。
-
“只是跳过子进程调用” - 不要做出疯狂的假设。显然情况并非如此。
-
只是一个想法,但是当你有 Python 时为什么要使用
sed? -
我使用 sed 是因为我有一个可行的解决方案。如果您在 Python 中有其他解决方案,我也想尝试一下。但是下面 Rob 提到了 re 模块,但从文档中我无法找到它是如何工作的。
-
请不要编辑问题来提供答案。相反,发布您自己的答案(如果您愿意,可以接受它;这样,您的问题将不再被视为未解决)。