我花了最后两个小时试图解决这个问题。请帮助我在过去两个小时内尝试使用Google。没运气。我做错了什么?
codes.txt的内容:
TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;
myscript.py
import re
from sqlalchemy import *
string = open("codes.txt").readlines()
for item in string:
set = [item.split(";")]
print "success"
为什么打印"成功"只有一次?我希望它能为codes.txt中的项目数打印成功。
答案 0 :(得分:5)
readlines()
实际上是在寻找换行符,因为看起来你的字符串没有任何字符,它只读取一行,因此只返回一个元素(这就是@kayZhu刚刚说的,道歉 :) )。我想你想分开分号,所以你可以试试这个:
In [19]: with open('codes.txt', 'r') as f:
....: contents = f.read().split(';')
....:
....:
In [20]: contents
Out[20]:
['TKF6J-KXP6V-F499V-Q9XPC-7J6TZ',
'J9YCV-D4TH6-WWWWV-F2RM7-F63XZ',
'GXKCC-QDT34-3JRY4-TWKHX-R763Z',
'']
然后你的迭代应该按预期工作。另外,尽量避免为变量使用Python内置名称(例如string
- 它只会导致心痛:))。
答案 1 :(得分:3)
readlines
取决于换行符\n
,以将行分隔为列表。在您的情况下,codes.txt的内容只是一行,因此整个列表string
只包含一个元素。
答案 2 :(得分:1)
问问自己:在第一次迭代中你期望item
是什么?第二?然后这样做:
for item in string:
print item
看看它与你的期望相比如何。
open("codes.txt").readlines()
的结果将为文件中的每个行分配一个元素(它不知道您可能与名称item
关联的更深层含义)。您的文件目前只有一行 - 如果您添加另一行,所以它看起来像这样:
TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;
TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;
(即,当前行的两倍),您将看到它打印两次。
答案 3 :(得分:0)
试试这个。
string = open("code.txt").readlines()
string= "".join(string)
for item in string.split(";"):
if len(item)>1:
print "success"
答案 4 :(得分:0)
with open(r'C:\Python33\1_.txt') as f:
d =f.read().split(';')
for a in d:
print(a)
其他版本的迭代