Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从文件中读取模式并写入另一个文件_Python_File - Fatal编程技术网

使用python从文件中读取模式并写入另一个文件

使用python从文件中读取模式并写入另一个文件,python,file,Python,File,我希望从文件中读取每个函数,并将其写入一个新文件,该文件对每个函数都是独立的 将_文件输入为: function Script1(){ var player = GetPlayer(); } function Script2(){ var sVar1 = 3; } function Script3(){ var sVar1 = 2; } 如何复制每个函数的内容?您可以使用此正则表达式,假设所有函数都从它们自己的行(函数SomeName()\n)开始,

我希望从文件中读取每个函数,并将其写入一个新文件,该文件对每个函数都是独立的

将_文件输入为:

function Script1(){
  var player = GetPlayer();
}    
function Script2(){
  var sVar1 = 3;    
}    
function Script3(){
  var sVar1 = 2;    
}

如何复制每个函数的内容?

您可以使用此正则表达式,假设所有函数都从它们自己的行(
函数SomeName()\n
)开始,并在新行(
\n}
)结束,如您的示例所示:

import re

with open('file.js', 'r') as f:
    content = f.read()

functions = re.findall(r'(function\s.+?\(.*?\)\n.+?\n\})', content, re.DOTALL)
for i, func in enumerate(functions):
    with open('func{}.js'.format(i), 'w') as f:
        f.write(func)
记住
re.DOTALL
使正则表达式匹配跨越多行的函数

输出示例:

func1.js:

function Script1(){
  var player = GetPlayer();
}

您可以只使用正则表达式:

import re

with open('input_file.js', 'r') as file:
    script_str = file.read()

exp = re.compile(r'function\s+([^\s(]+)\s*\([^)]*\)\s*\{([^}]*)\}')
matches = exp.findall(script_str)
for m in matches:
    script_name, script_content = m[0], m[1].strip()
    with open('%s.js' % script_name, 'w') as file:
        file.write(script_content)

如果您还想捕获函数参数,只需在正则表达式的相应部分添加一个组(即,用括号环绕
[^)]*

如果javascript源代码一开始就简单且格式良好,您可以使用regex获得


对于涉及的更多内容,我建议使用合适的解析器,如。

输入文件是js。我正在使用python来读/写文件。那么您希望每个函数中的每个变量都放在自己的文本文件中吗?或者您还需要函数声明和大括号吗?是的,函数声明和bra.ces也应该这样做,但是为每个函数创建新文件会导致类型错误:无法连接'str'和'int'对象。用open('func'+i+'.js',w')作为f:对不起,我错了。更正了。js把我的python弄糊涂了。您可以使用
'func{}.js'.format(i)
,因为新文件名感觉正确,它会给出一个类型错误,因为“\u sre.sre\u Match”对象是不可编辑的(对于匹配中的m),这会为每个函数读取创建一个新文件。@Dev One抱歉,它是
exp.findall
,而不是
exp.Match
。这不会创建任何文件,只会在内存中创建一个dict对象。你可能想把它写进一个文件,或者打印出来,或者别的什么。哦,好吧,我不明白那部分,我会修正它:D