我无法读取文件并写入Python中的文件

时间:2017-07-20 11:35:33

标签: python

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

1 个答案:

答案 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