使用Python在本地工作但在EC2上无法在列表项中查找字符串

2024-09-24 00:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在本地机器上运行良好的Python脚本:

fileC = open(locationA + filenameC, 'r')

listActivities = 'listActivities.log'
outputfile = open(locationA + listActivities, 'w')  
fileA = open(location + filenameA, 'r')
fileA = [line.rstrip('\n') for line in fileA]   
Alines =  set(fileA) 

for item in Alines:
        outputfile.write("%s\n" % item)

for lineC in fileC:

    fieldC = lineC.split('#')
    fieldComp = fieldC[0]+'#'+fieldC[2] 
    outputfile.write("fieldComp: %s \n" % fieldComp)
    p = 0
    if fieldComp in Alines:
        p = utils.clicksAfterConversion(fieldC[0], fieldC[2], fieldC[1])

我的目标是在列表Alines中找到fieldComp并做进一步的处理。问题是,它在本地工作,但一旦在AWS上,它就找不到任何对应的FieldComp在Alines中。 我注意到,当我在一个单独的文件中右对齐Alines的所有项(outputfile.write(“%s\n”%item)),在AWS上的每一行末尾都会添加一些空格,而在本地则不是这样。我怀疑是这个原因,但我没有其他想法

谢谢你


Tags: inforlineopenitemwriteoutputfilelinec
2条回答

在这种情况下,正则表达式可能不是答案。在做了一些搜索之后,我找到了fnmatch模块。它允许使用类似shell的通配符进行搜索。它还支持列表过滤,所以您可能可以摆脱这种情况

import fnmatch
...
if fnmatch.filter(Alines, "%s*" % fieldComp):
    p = utils.clicksAfterConversion(fieldC[0], fieldC[2], fieldC[1])

不确定这是否能解决问题,但是,您说过在AWS中每行都添加了一些空格。正则表达式匹配可能适合您的情况

而不是使用

if fieldComp in Alines:

你可以用正则表达式。例如

import re
...
blah blah code here
...
...
for item in Alines:
    if re.search(fieldComp, item):
        p = utils.clicksAfterConversion(fieldC[0], fieldC[2], fieldC[1])

相关问题 更多 >