python - 将 Perl 翻译成 Python

标签 python perl rewrite

我在 migrating my SQLite database to mysql 时发现了这个 Perl 脚本

我想知道(因为我不知道 Perl)如何用 Python 重写它?

最短(代码)答案的奖励积分:)

编辑:对不起,我的意思是最短的代码,而不是严格意义上的最短答案

#! /usr/bin/perl

while ($line = <>){
    if (($line !~  /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){

        if ($line =~ /CREATE TABLE \"([a-z_]*)\"(.*)/){
                $name = $1;
                $sub = $2;
                $sub =~ s/\"//g; #"
                $line = "DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n";
        }
        elsif ($line =~ /INSERT INTO \"([a-z_]*)\"(.*)/){
                $line = "INSERT INTO $1$2\n";
                $line =~ s/\"/\\\"/g; #"
                $line =~ s/\"/\'/g; #"
        }else{
                $line =~ s/\'\'/\\\'/g; #'
        }
        $line =~ s/([^\\'])\'t\'(.)/$1THIS_IS_TRUE$2/g; #'
        $line =~ s/THIS_IS_TRUE/1/g;
        $line =~ s/([^\\'])\'f\'(.)/$1THIS_IS_FALSE$2/g; #'
        $line =~ s/THIS_IS_FALSE/0/g;
        $line =~ s/AUTOINCREMENT/AUTO_INCREMENT/g;
        print $line;
    }
}

成功迁移sqlite数据库需要一些额外的代码(处理一行创建表语句,外键,修复原始程序中将空字段''转换为的错误'

posted the code on the migrating my SQLite database to mysql Question

最佳答案

这是一个相当直白的翻译,只有最少的明显样式更改(将所有代码放入一个函数中,尽可能使用字符串而不是重新操作)。

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()

关于python - 将 Perl 翻译成 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1067060/

相关文章:

python - 是否有自定义 Django 电子邮件确认链接模块?

Perl - 如何跳过先前处理中已读取的行

.htaccess - php 搜索表单和 url 重写/格式化

nginx - 使用 Nginx 的规范 URL

python - 为什么 event.type 函数返回名称错误?

python - 如何获取 pygments 格式化程序的 css?

perl - 从环境变量配置 Dancer?

.htaccess 友好的 URL

python - Pandas 保留数字部分

perl - 如何在 Perl 中处理存储在二进制文件中的操作码?