【问题标题】:Python "startswith" not working when string is a variable passed to the function当字符串是传递给函数的变量时,Python“startswith”不起作用
【发布时间】:2018-05-01 17:25:04
【问题描述】:

在我的主函数中,我有一个包含搜索值列表的元组。我正在尝试在数据数组中一一搜索这些值中的每一个。在我的主函数中,我将一个数据数组(从文本文件中提取)以及要搜索的特定值传递给我的搜索函数。

我的代码的精简版本如下。 .startswith 在通过“v”传递给函数时找不到字符串。如果我手动定义字符串,但是它可以正常工作。我已经检查了字符串多种方法来验证它是一个字符串,是正确的长度,没有丢失的字符等,并且找不到任何问题。

有什么想法吗?

def find_ends(data, v):

    for line_no, line in enumerate(data):
        if line.startswith (v):
            start = line_no
    return start


def main():

    fr =open('filename', 'r')
    data = fr.readlines()
    fr.close

    arraynames = ["TOPOGRAPHY:", "XCOORD:"]

    for v in arraynames:
        start = find_ends(data, v)

    return

if __name__ == '__main__':
    main()

【问题讨论】:

  • 显示数据。当字符串作为参数传递与在函数外部使用时,功能上应该没有任何区别。更有可能的答案是数据与您的预期不同。不同的外壳,松散的空格/换行符。您可能会遗漏一些细微的差异。
  • 另外,你永远不会打电话给close。您只是在引用该函数。不是这里的问题,只是一个注释。
  • 你遇到了什么错误?
  • 您可能需要删除我添加井号的空格。根据编辑器的不同,我已经看到在方法名称和括号“中断”之间放置了一个空格。 line.startswith#(v) 我注意到您在使用 enumerate(data) 调用或 find_ends(data, v) 调用时没有空间......这可能只是原因
  • 制作一个示例文件来测试它,您提供的代码似乎工作正常。仔细查看这个“精简”版本与您的原始版本之间的差异,以找出发生了哪些变化。您是否添加了退货声明?有没有你应该去掉的空白,比如line.strip().startswith(v)

标签: python python-3.6 startswith


【解决方案1】:

感谢所有有用的 cmets。像往常一样,代码似乎刚刚开始工作,不知道为什么。这是最终的代码,也许有人可以发现发生了什么!

数据如下所示。该脚本查找包含关键字的行及其下方相应行/值的数量。然后脚本确定文件/数组中相关的开始行和结束行,稍后需要复制这些行,并将此信息返回给主函数。

TOPOGRAPHY: 25  
0.000
0.000
0.000
0.000
...
XCOORD: 25
0.000
2.500
5.0
...
...

def find_ends(data, v):

    for line_no, line in enumerate(data):
        if line.startswith (v):
            parts = line.split()
            start = line_no
            records = int(parts[1])
            end = line_no + records
    print(start, end, records)      
    return start, end, records

def main():

    fr = open('file', 'r')
    data = fr.readlines()
    fr.close

    arraynames = ["TOPOGRAPHY:", "XCOORD:"]

    for v in arraynames:
        start, end , records = find_ends(data, v)  
        print(start, end, records)  


if __name__ == '__main__':
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2018-03-23
    • 1970-01-01
    • 2015-02-04
    • 2016-01-17
    相关资源
    最近更新 更多