import sys
def main():
tclust_blue = open("ef_blue.xpk")
tclust_original = open("tclust.txt","a")
for line in tclust_blue.readlines():
if "{}" in line:
tclust_original.write(line)
我无法阅读文件" ef_blue.xpk"它与我的Python脚本位于同一目录中,与tclust.txt
文件位于同一目录中。错误说:
IO错误:[错误2]没有这样的文件或目录:' ef_blue.xpk'
此外,我不知道我的代码是否正确。我有一个名为tclust.txt的文本文件,我在一个名为ef_blue.xpk的文件中有行,我想从ef_blue.xpk中获取值(而不是行)并将它们放入tclust.txt。
我执行文件的方式是通过终端使用命令
nfxsl readin.py
。
答案 0 :(得分:2)
您的脚本使用相对路径,并且相对路径不会针对“您的脚本所在的位置”进行解析,而是针对执行代码时当前工作目录的相对路径。如果您不想依赖当前工作目录(很明显您不想),则需要使用绝对路径。
这里有两个选项:将文件(或目录...)路径作为命令行参数传递,或使用sys.path
模块的函数和魔术变量__file__
来构建绝对路径:
whereami.py:
import os
import sys
print("cwd : {}".format(os.getcwd()))
print("__file__ : {}".format(__file__))
print("abs file : {}".format(os.path.abspath(__file__)))
here = os.path.dirname(os.path.abspath(__file__))
print("parent directory: {}".format(here))
sibling = os.path.join(here, "somefile.ext")
print("sibling with absolute path: {}".format(sibling))
示例输出:
bruno@bigb:~/Work$ python playground/whereami.py
cwd : /home/bruno/Work
__file__ : playground/whereami.py
abs file : /home/bruno/Work/playground/whereami.py
parent directory: /home/bruno/Work/playground
sibling with absolute path: /home/bruno/Work/playground/somefile.ext
作为旁注:
首先,始终关闭你的文件 - 当你的程序退出时,当前的CPython实现会关闭它们,但这是一个实现细节而不是规范的一部分。确保文件关闭的最简单方法是with
语句:
with open("somefile.ext") as input, open("otherfile.ext", "w") as output:
# do something with output and input here
# ...
#此时(在with
块之外),
#两个文件都将关闭。
第二点,file.readlines()
将读取内存中的整个文件。如果您只想在文件中的行上迭代一次,只需遍历文件本身,就可以避免吃掉内存:
with open("somefile.ext") as f:
for line in f:
print f