Python会将文件拆分为多个文件,每个文件对应一个特定字符串

2024-05-15 17:04:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个存储过程的文件,如下所示

--
-- Name: abc(character varying); Type: FUNCTION; Schema: schema_name; Owner: -
--
CREATE FUNCTION schema_name.abc(schema_name character varying) RETURNS opaque
    LANGUAGE plpgsql
    AS '54:-1', $$
    
DECLARE
 a  INT:= 0;
 b  INT:= 0;

BEGIN 
        
 
 END;

$$;


--
-- Name: bcd(); Type: FUNCTION; Schema: schema_name; Owner: -
--

CREATE FUNCTION schema_name.bcd() RETURNS opaque
    LANGUAGE plpgsql
    AS '-1', $$         

DECLARE
 a  INT:= 0;
 b  INT:= 0;

BEGIN 
    
 
 END;
    $$;


--
-- Name: cde(); Type: FUNCTION; Schema: schema_name; Owner: -
--

CREATE FUNCTION schema_name.cde() RETURNS opaque
    LANGUAGE plpgsql
    AS '-1', $$         

DECLARE
 a  INT:= 0;
 b  INT:= 0;

BEGIN 
    

 
 END;
    $$;

我需要将它分成以

--
-- Name:

此外,各个文件应以架构名称命名。在这种情况下,文件名应该是abc.sql、bcd.sql、cde.sql

到目前为止我试过这个

token = 'CREATE FUNCTION'
chunks = []
current_chunk = []

for line in open('procedures.txt'):
   if line.startswith(token) and current_chunk: 
      chunks.append(current_chunk[:])
      current_chunk = []
   current_chunk.append(line)
   print (current_chunk)

chunks.append(current_chunk) 

Tags: nameschematypecreatefunctioncurrentlanguagereturns
1条回答
网友
1楼 · 发布于 2024-05-15 17:04:50

试试这个:

import os

path = r"D:\test"

token = '  Name: '
chunks = {}
current_chunk = []


with open (os.path.join(path, "test.txt"), "r") as myfile:
    data=myfile.readlines()

for line in data:
    if line.startswith(token):
        start = line.find("token")+len(token)
        end = line.find("(")
        schema_name = line[start:end].strip()
        
        current_chunk = []
        current_chunk.append(line)
        chunks[schema_name] = current_chunk
    else:
        current_chunk.append(line)

print (chunks)

for name, storage in chunks.items():
    print(name)
    with open(os.path.join(path, name + '.sql'), 'w') as file:
        file.write(" ".join(storage))
        file.close()

相关问题 更多 >