检查字符串是否在文本文件中不起作用

时间:2017-08-22 20:48:33

标签: python file iostream

我在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

每次运行时确实打印失败。我是否使用不正确的方法从文本文档中读取数据?

4 个答案:

答案 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()'或者将它保存在另一个变量中,否则你有'失败'的消息