Python程序运行无打印结果排查及genfromtxt功能咨询
问题分析与解答
一、程序无打印输出的原因
你的程序没有输出主要是文件路径判断错误,还有几个小细节问题,我逐一拆解:
- 文件路径拼接错误
os.listdir("folder")返回的是目标文件夹里的纯文件名(比如check1.0),但os.path.isfile(df)是检查当前工作目录下是否存在这个文件,而非folder子目录下的。所以这个判断永远为False,导致整个if代码块都没执行,自然没有任何打印输出。
解决方法:用os.path.join(path, df)拼接完整文件路径,修改后的判断逻辑应该是:
full_path = os.path.join(path, df) if re.match(prefix, df) and os.path.isfile(full_path):
正则匹配的潜在小问题
re.match(prefix, df)是从字符串开头匹配前缀,如果你文件名都是check1.0这种以check开头的格式,这个没问题;但如果文件名是比如xcheck1.0就会匹配失败。如果你的需求是只要文件名包含check,可以换成re.search(prefix, df),不过根据你的命名习惯应该不用改。变量名大小写错误
最后一行的print dictData里,dictData和你前面定义的dicdata大小写不一致——即使前面的代码执行了,这里也会抛出NameError,需要改成print dicdata。
二、关于genfromtxt的作用
genfromtxt是numpy库中的函数,它的作用是读取并解析文件内的数据,完全不是对文件名操作。你需要传入文件的完整路径(比如上面的full_path),它会打开这个文件,按照指定的分隔符(比如你设置的delimiter=', ')解析文件里的文本内容,最终返回一个numpy数组。简单说,它是用来处理文件内容的,和文件名本身无关。
修改后的可运行示例代码片段:
import os import re import locale from numpy import genfromtxt path = "folder" datafiles = os.listdir(path) prefix = 'check' dicdata = {} for df in datafiles: full_path = os.path.join(path, df) if re.match(prefix, df) and os.path.isfile(full_path): print("df values are %s" % df) hmax = locale.atof(df[5:]) print("hmax values are %s" % hmax) data = genfromtxt(full_path, delimiter=', ') print(data) dicdata[hmax] = data print(dicdata) print(len(data[0]))
内容的提问来源于stack exchange,提问作者programming
相关产品推荐
相关产品推荐

