使用python

时间:2016-05-27 01:55:02

标签: python sql string ascii non-ascii-characters

我有一个大的SQL文件,其中有大约1毫升插入,一些插入已损坏(大约6000),我需要删除所有可能删除的奇怪字符,因此我可以将它们插入到我的数据库中。

例: INSERT INTO BX-Books VALUES('2268032019','Petite histoire deladÃ?Ã,©sinformation','Vladimir Volkoff',1999,'Editions du Rocher','http://images.amazon.com/images/P/2268032019.01.THUMBZZZ.jpg','{ {3}}”, 'http://images.amazon.com/images/P/2268032019.01.MZZZZZZZ.jpg');

我想只删除奇怪的字符并留下所有正常字符

我尝试使用以下代码:

import fileinput
import string

fileOld = open('text1.txt', 'r+')
file = open("newfile.txt", "w")

for line in fileOld: #in fileinput.input(['C:\Users\Vashista\Desktop\BX-SQL-Dump\test1.txt']):
    print(line)
    s = line
    printable = set(string.printable)
    filter(lambda x: x in printable, s)
    print(s)
    file.write(s)

但它似乎无法正常工作,当我打印时,它与行中打印的内容相同,而陌生人则认为没有任何内容写入文件。

有关如何解决此问题的任何建议或提示都很有用

2 个答案:

答案 0 :(得分:1)

    import string

strg = "'2268032019', Petite histoire de la d�©sinformation','Vladimir Volkoff',1999,'Editions du Rocher','http://images.amazon.com/images/P/2268032019.01.THUMBZZZ.jpg','http://images.amazon.com/images/P/2268032019.01.MZZZZZZZ.jpg','http://images.amazon.com/images/P/2268032019.01.LZZZZZZZ.jpg');"
newstrg = ""
acc = """ '",{}[].`;:  """
for x in strg:
    if x in string.ascii_letters or x in string.digits or x in acc:
        newstrg += x
print (newstrg)

输出;

'2268032019', Petite histoire de la dsinformation','Vladimir Volkoff',1999,'Editions du Rocher','http:images.amazon.comimagesP2268032019.01.THUMBZZZ.jpg','http:images.amazon.comimagesP2268032019.01.MZZZZZZZ.jpg','http:images.amazon.comimagesP2268032019.01.LZZZZZZZ.jpg';
>>>

您可以检查字符串的元素是否是ASCII字母,然后创建一个没有非ASCII字母的新字符串。

此外,它取决于您的变量类型。如果使用列表,则不必定义新变量。只需del mylist[x]即可。

答案 1 :(得分:-1)

您可以使用正则表达式sub()来执行简单的字符串替换。 https://docs.python.org/2/library/re.html#re.sub

# -*- coding: utf-8 -*-

import re

dirty_string = u'©sinformation'
# in first param, put a regex to screen for, in this case I negated the desired characters.
clean_string = re.sub(r'[^a-zA-Z0-9./]', r'', dirty_string)

print clean_string
# Outputs
>>> sinformation