如何拆分大文本文件中的组合列表?
How do I split a combo list in a large text file?
我的问题是我有一个非常大的电子邮件和密码数据库,我需要将它发送到 mysql 数据库。
.txt 文件格式是这样的:
emailnumberone@gmail.com:password1
emailnumbertwo@gmail.com:password2
emailnumberthree@gmail.com:password3
emailnumberfour@gmail.com:password4
emailnumberfive@gmail.com:password5
我的想法是制作一个循环,获取该行并使其成为一个变量,搜索“:”并选择之前的文本,将其发送到数据库,然后与该行的后面部分相同。我该怎么做?
这可以通过 python 中字符串的简单 split()
方法来完成。
>>> a = 'emailnumberone@gmail.com:password1'
>>> b = a.split(':')
>>> b
['emailnumberone@gmail.com', 'password1']
为了适应@PatrickArtner 的复杂密码,可以这样做:
atLocation = a.find('@')
realSeperator = atLocation + a[atLocation:].find(':')
emailName = a[0:atLocation]
emailDomain = a[atLocation:realSeperator]
email = emailName + emailDomain
password = a[realSeperator + 1:]
print(email, password)
>>> emailnumberone@gmail.com com:plex:PassWord:fail
str.find() returns给定字符串中给定字符的第一次出现位置。电子邮件的名称字段可以包含 :
,但不能包含 @
。因此,首先定位 @
然后定位 :
将为您提供正确的分隔位置。之后拆分字符串将是小菜一碟。
将文件作为上下文管理器打开(使用 open(...)),您可以使用 for 循环遍历行,然后使用正则表达式匹配(重新模块)(或仅拆分为“:”)并使用 sqlite3将您的值插入数据库。
因此文件:
with open("file.txt", "r") as f:
for line in f:
pass #manipulation
带有一些错误处理的简短程序:
创建演示数据文件:
t = """
emailnumberone@gmail.com:password1
emailnumbertwo@gmail.com:password2
emailnumberthree@gmail.com:password3
emailnumberfour@gmail.com:password4
emailnumberfive@gmail.com:password5
k
: """
with open("f.txt","w") as f: f.write(t)
解析数据/存储:
def store_in_db(email,pw):
# replace with db access code
# see http://bobby-tables.com/python
# for parametrized db code in python (or the API of your choice)
print("stored: ", email, pw)
with open("f.txt") as r:
for line in r:
if line.strip(): # weed out empty lines
try:
email, pw = line.split(":",1) # even if : in pw: only split at 1st :
if email.strip() and pw.strip(): # only if both filled
store_in_db(email,pw)
else:
raise ValueError("Something is empty: '"+line+"'")
except Exception as ex:
print("Error: ", line, ex)
输出:
stored: emailnumberone@gmail.com password1
stored: emailnumbertwo@gmail.com password2
stored: emailnumberthree@gmail.com password3
stored: emailnumberfour@gmail.com password4
stored: emailnumberfive@gmail.com password5
Error: k
not enough values to unpack (expected 2, got 1)
Error: : Something is empty: ': '
编辑:根据 What characters are allowed in an email address? - 如果引用,':'
可能是电子邮件第一部分的一部分。
这理论上允许输入
`"Cool:Emailadress@google.com:coolish_password"`
此代码会出错。请参阅 以了解如何以不同方式分解拆分以避免此问题。
我的问题是我有一个非常大的电子邮件和密码数据库,我需要将它发送到 mysql 数据库。
.txt 文件格式是这样的:
emailnumberone@gmail.com:password1
emailnumbertwo@gmail.com:password2
emailnumberthree@gmail.com:password3
emailnumberfour@gmail.com:password4
emailnumberfive@gmail.com:password5
我的想法是制作一个循环,获取该行并使其成为一个变量,搜索“:”并选择之前的文本,将其发送到数据库,然后与该行的后面部分相同。我该怎么做?
这可以通过 python 中字符串的简单 split()
方法来完成。
>>> a = 'emailnumberone@gmail.com:password1'
>>> b = a.split(':')
>>> b
['emailnumberone@gmail.com', 'password1']
为了适应@PatrickArtner 的复杂密码,可以这样做:
atLocation = a.find('@')
realSeperator = atLocation + a[atLocation:].find(':')
emailName = a[0:atLocation]
emailDomain = a[atLocation:realSeperator]
email = emailName + emailDomain
password = a[realSeperator + 1:]
print(email, password)
>>> emailnumberone@gmail.com com:plex:PassWord:fail
str.find() returns给定字符串中给定字符的第一次出现位置。电子邮件的名称字段可以包含 :
,但不能包含 @
。因此,首先定位 @
然后定位 :
将为您提供正确的分隔位置。之后拆分字符串将是小菜一碟。
将文件作为上下文管理器打开(使用 open(...)),您可以使用 for 循环遍历行,然后使用正则表达式匹配(重新模块)(或仅拆分为“:”)并使用 sqlite3将您的值插入数据库。
因此文件:
with open("file.txt", "r") as f:
for line in f:
pass #manipulation
带有一些错误处理的简短程序:
创建演示数据文件:
t = """
emailnumberone@gmail.com:password1
emailnumbertwo@gmail.com:password2
emailnumberthree@gmail.com:password3
emailnumberfour@gmail.com:password4
emailnumberfive@gmail.com:password5
k
: """
with open("f.txt","w") as f: f.write(t)
解析数据/存储:
def store_in_db(email,pw):
# replace with db access code
# see http://bobby-tables.com/python
# for parametrized db code in python (or the API of your choice)
print("stored: ", email, pw)
with open("f.txt") as r:
for line in r:
if line.strip(): # weed out empty lines
try:
email, pw = line.split(":",1) # even if : in pw: only split at 1st :
if email.strip() and pw.strip(): # only if both filled
store_in_db(email,pw)
else:
raise ValueError("Something is empty: '"+line+"'")
except Exception as ex:
print("Error: ", line, ex)
输出:
stored: emailnumberone@gmail.com password1
stored: emailnumbertwo@gmail.com password2
stored: emailnumberthree@gmail.com password3
stored: emailnumberfour@gmail.com password4
stored: emailnumberfive@gmail.com password5
Error: k
not enough values to unpack (expected 2, got 1)
Error: : Something is empty: ': '
编辑:根据 What characters are allowed in an email address? - 如果引用,':'
可能是电子邮件第一部分的一部分。
这理论上允许输入
`"Cool:Emailadress@google.com:coolish_password"`
此代码会出错。请参阅