我不能在Python中读取文件并写入文件

我不能在Python中读取文件并写入文件,python,Python,我在读取文件ef_blue.xpk时遇到问题,该文件与我的Python脚本位于同一目录,与tclust.txt文件位于同一目录。错误显示: IO错误:[ErrNo 2]没有这样的文件或目录:“ef_blue.xpk” 我也不知道我的代码一开始是否正确。我有一个名为tclust.txt的文本文件,在一个名为ef_blue.xpk的文件中有行,我想从ef_blue.xpk中获取值而不是行,并将它们放入tclust.txt 我执行文件的方式是通过终端使用命令 nfxsl readin.py。您的脚本使

我在读取文件ef_blue.xpk时遇到问题,该文件与我的Python脚本位于同一目录,与tclust.txt文件位于同一目录。错误显示:

IO错误:[ErrNo 2]没有这样的文件或目录:“ef_blue.xpk”

我也不知道我的代码一开始是否正确。我有一个名为tclust.txt的文本文件,在一个名为ef_blue.xpk的文件中有行,我想从ef_blue.xpk中获取值而不是行,并将它们放入tclust.txt

我执行文件的方式是通过终端使用命令
nfxsl readin.py。

您的脚本使用相对路径,相对路径不是根据脚本所在的位置解析的,而是根据代码执行时的当前工作目录解析的。如果您不想依赖当前工作目录,而且显然不想依赖,那么需要使用绝对路径

这里有两个选项:传递文件或目录。。。path作为命令行参数,或使用sys.path模块的函数和魔术变量_file__;来构建绝对路径:

其中mi.py:

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)
示例输出:

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))
作为旁注:

首先,始终关闭您的文件-确定当前的CPython实现将在您的程序退出时关闭它们,但这是一个实现细节,不是规范的一部分。确保文件关闭的最简单方法是with语句:

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
此时,在with块外, 两个文件都将关闭

第二点,file.readlines将在内存中读取整个文件。如果您只想在文件中的行上迭代一次,只需在文件本身上迭代,就可以避免占用内存:

with open("somefile.ext") as input, open("otherfile.ext", "w") as output:
   # do something with output and input here
   # ...

实际上,您也应该从同一个目录启动python控制台。它有字节或字符。当您阅读它们时,您可以将它们解释为有意义的值。请说明您是如何执行程序的。还显示了一个输入文件的示例。@Code实际上是徒弟,而且要完全学究化,一个文件也没有字符,它包含的都是字节、句点@布鲁诺德修利尔说得很好。包括Python在内的大多数语言都允许我们以文本模式打开文件,因此将字节转换为字符相对来说比较轻松。转换为其他类型的值需要更多的工作。是否在代码之后调用main函数。我这么说的原因是我知道你的堆栈溢出点是1。我猜您是python编程新手。您需要在主体定义之后的下一行添加main,即我试图编写的文件中应该包含的mi.py文件的位置。那么,我如何依赖当前的工作目录?@user130306不,显然,这只是一个示例,说明了如何从脚本路径构建绝对路径。wrt我将如何依赖当前工作目录:正如我所说,如果你不给出一个绝对路径,你的路径将根据当前工作目录解析-这就是它的工作原理,句号。。
 with open("somefile.ext") as f:
     for line in f:
         print f