为了账号安全,请及时绑定邮箱和手机立即绑定

Python脚本在Windows中输出字典数据,但在Linux中不输出

Python脚本在Windows中输出字典数据,但在Linux中不输出

FFIVE 2021-04-02 13:10:17
我正在编写脚本来检查两个文件之间的ID重叠,在Windows中,它能够从{ID:filepath}的字典中输出ID列表的文件路径。但是,在我的Linux服务器中,没有输出。CELs=[]CELpaths = {}f=open(sys.argv[1], 'r')data = f.read()lines = data.split('\n')[1:-1]for line in lines:    tabs = line.split('\\')    CELs.append(tabs[-1])    CELpaths[(tabs[-1])]=lineyyid = []f2=open(sys.argv[2], 'r')data2=f2.read()lines2=data2.split('\n')for x in lines2:    yyid.append(x)for c in yyid:    if c in CELpaths:        print (CELpaths[c])问题肯定在“ yyid中的c:”段中,在Linux服务器上的Python无法执行“ if C in CELs:”行。我的Linux运行的是Python 2.7,而我的Windows运行的是Python3。这仅仅是版本问题吗?有没有办法修复语法以允许在Linux上输出?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

使用正确的方法逐行读取文件(这通常是遍历文件对象),使用line.strip()(不带参数)删除换行符(无论是什么),并记住这一点,您可能会遇到较少的问题。 Python“ \”是一个转义字符,因此“ \”实际上是“ \”(如果要两个反斜杠,请使用原始字符串ie r"\\")。


另外,Python不会保证打开的文件将被关闭,因此您必须注意这一点。


未经测试(当然,因为您没有发布源数据),但这主要是脚本的pythonic等效项:


def main(p1, p2):

    CELs=[]

    CELpaths = {}


    with open(p1) as f:

        # skip first line

        f.next() 

        for line in f:

            # remove trailing whitespaces (including the newline character) 

            line = line.rstrip() 

            # I assume the `data[1:-1] was to skip an empty last line

            if not line:

                continue

            # If you want a single backward slash, 

            # this would be better expressed as `r'\'`

            # If you want two, you should use `r'\\'.

            # AND if it's supposed to be a platform-dependant

            # filesystem path separator, you should be using

            # `os.path.sep` and/or `os.path` functions.  

            tabs = line.split('\\')

            CELs.append(tabs[-1])

            CELpaths[(tabs[-1])] = line


    with open(p2) as f:

        # no need to store the whole stuff in memory

        for line in f:

            line = line.strip()

            if line in CELpaths:

                print (CELpaths[line])


if __name__ == "__main__":

    import sys

    p1, p2 = sys.argv[1], sys.argv[2]

    main(p1, p2)

我当然不能保证它会解决您的问题,因为您没有提供MCVE ...


查看完整回答
反对 回复 2021-04-16
  • 1 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信