Translating Perl to Python

前端 未结 8 1418
[愿得一人]
[愿得一人] 2021-01-30 07:50

I found this Perl script while migrating my SQLite database to mysql

I was wondering (since I don\'t know Perl) how could one rewrite this in Python?

Bonus point

8条回答
  •  滥情空心
    2021-01-30 07:56

    Here's a pretty literal translation with just the minimum of obvious style changes (putting all code into a function, using string rather than re operations where possible).

    import re, fileinput
    
    def main():
      for line in fileinput.input():
        process = False
        for nope in ('BEGIN TRANSACTION','COMMIT',
                     'sqlite_sequence','CREATE UNIQUE INDEX'):
          if nope in line: break
        else:
          process = True
        if not process: continue
        m = re.search('CREATE TABLE "([a-z_]*)"(.*)', line)
        if m:
          name, sub = m.groups()
          line = '''DROP TABLE IF EXISTS %(name)s;
    CREATE TABLE IF NOT EXISTS %(name)s%(sub)s
    '''
          line = line % dict(name=name, sub=sub)
        else:
          m = re.search('INSERT INTO "([a-z_]*)"(.*)', line)
          if m:
            line = 'INSERT INTO %s%s\n' % m.groups()
            line = line.replace('"', r'\"')
            line = line.replace('"', "'")
        line = re.sub(r"([^'])'t'(.)", r"\1THIS_IS_TRUE\2", line)
        line = line.replace('THIS_IS_TRUE', '1')
        line = re.sub(r"([^'])'f'(.)", r"\1THIS_IS_FALSE\2", line)
        line = line.replace('THIS_IS_FALSE', '0')
        line = line.replace('AUTOINCREMENT', 'AUTO_INCREMENT')
        print line,
    
    main()
    

提交回复
热议问题