我在python 3.6中编写,但在短文本文档中使我的代码匹配字符串时遇到问题。这是打破我更大程序的确切逻辑的一个简单例子:
bah
gah
fah
dah
mah
文本文档的格式如下:
SELECT
QTY AS QUANTITY,
IS_UT AS IS_UT,
G_ACC_ID AS G_ACC_ID,
CR_AND_F_ID AS CR_AND_F_ID,
TRNG_ENRMT_ID AS TRNG_ENRMT_ID
TRAINING_COURSE_ID AS TRAINING_COURSE_ID
(CASE WHEN A.CR_AND_F_ID IS NULL OR A.CR_AND_F_ID = 0 THEN
SELECT
A.CR_AND_F_ID AS CR_AND_F_ID,
A.IS_UT AS IS_UT,
A.G_ACC_ID AS G_ACC_ID,
A.CR_AND_F_ID AS CR_AND_F_ID,
A.TRNG_ENRMT_ID AS TRNG_ENRMT_ID,
t4.TRAINING_COURSE_ID AS TRAINING_COURSE_ID
FROM T_E_P_LD
LEFT OUTER JOIN T_TRAINING t2
ON t2.TRAINING_ID = A.TRNG_ENRMT_ID
LEFT OUTER JOIN TR_ENROL t3
ON t2.TR_ID = t3.TR_ID
LEFT OUTER JOIN TR_CLASS t4
ON t3.TR_CLASS_ID = t4.TR_CLASS_ID
ELSE A.CR_AND_F_ID
END) AS TEST
FROM T_E_P_LD
每次运行时确实打印失败。我是否使用不正确的方法从文本文档中读取数据?
答案 0 :(得分:1)
问题是您正在打印print(file.read().splitlines())
所以它耗尽了文件,下一次调用file.read().splitlines()
会返回一个空列表...
更好的方式来" grep"您的模式将迭代文件行而不是完全读取它。因此,如果您在文件的早期找到字符串,则可以节省时间:
with open(PATH, 'r') as f:
for line in f:
if line.rstrip()=="bah":
break
else:
# else is reached when no break is called from the for loop: fail
print("fail")
这里的小问题是不要忘记调用line.rstrip()
,因为文件生成器会使用行终止符发出行。另外,如果您的文件中有一个尾随空格,那么此代码仍会与该字匹配(如果您想要匹配前导空白,请将其设为strip()
)
如果您想匹配很多单词,请考虑创建set
行:
lines = {line.rstrip() for line in f}
因此您的in lines
电话会更快。
答案 1 :(得分:1)
试一试:
PATH = "C:\\Users\\JoshLaptop\\PycharmProjects\\practice\\commented.txt"
file = open(PATH, 'r')
words = file.read().splitlines()
print(words)
if 'bah' not in words:
print("fail")
答案 2 :(得分:0)
您无法两次阅读该文件。
当您执行print(file.read().splitlines())
时,将读取该文件,并且对此函数的下一次调用将不会返回任何内容,因为您已经在文件末尾。
答案 3 :(得分:0)
PATH = "your_file"
file = open(PATH, 'r')
words = ['bah', 'dah', 'gah', "fah", 'mah']
if 'bah' not in (file.read().splitlines()) :
print("fail")
你可以看到输出不是'失败'你必须在代码中使用一个'file.read()。splitlines()'或者将它保存在另一个变量中,否则你有'失败'的消息