我需要通过Python给Sed打电话。我尝试了this问题的答案,但是它不起作用。
我的代码是(是的,该文件没有扩展名,它在使用putty时工作):
filename = '/home/user1/file'
subprocess.call(["sed","-i",r"$'s/[][]//g;s/,/\\\n/g'",filename])
有人能看出是怎么回事吗?脚本执行,但只是跳过子进程调用。
好的,我使用Python模块进行了尝试,这是我的代码:
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在打开该文件时会创建一个空的dataframe。然而,如果我评论一下:
#temp = open(filenametemp,"w+")
#temp.write(text)
并再次运行脚本,所有数据都将正确地加载到一个dataframe中。
有人能解释一下为什么会发生这种情况,并有解决办法吗?
原来我必须关闭这个文件才能使用它。因此,虽然对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)
发布于 2015-04-09 09:55:20
1)“我需要通过Python调用Sed”。我不认为你真的需要那个。使用re
模块的Python程序可以完成sed
所能做的所有事情,甚至更多。
2)“脚本执行,但只是跳过子进程调用。”我觉得这也不准确。似乎更有可能的是,subprocess.call
实际上被调用,sed
运行,但是sed
命令中的语法错误阻碍了sed
完成其职责。
3)你的字符串中有几个额外的字符。它不需要$
、'
或相当多的\
。试试这个:
import subprocess
filename = '/tmp/file'
subprocess.call(["sed","-i",r"s/[][]//g;s/,/\n/g",filename])
以下是之前的/tmp/file
:
Hello[] This Is[] A Test, this is just a test, you[] know?
及之后:
Hello This Is A Test
this is just a test
you know?
https://stackoverflow.com/questions/29543017
复制相似问题