Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用row和col在txt.NET文件中查找字母_Python - Fatal编程技术网

Python 使用row和col在txt.NET文件中查找字母

Python 使用row和col在txt.NET文件中查找字母,python,Python,我已经创建了一个包含不同句子的txt.file,字母的位置之间没有联系,我希望将其保存为Python中的字典,然后使用row和col确定该文件中的任何特定字母 在代码中,我想让Python问两个问题来确定一个特定的字母: 询问要查找的文件 询问两个坐标(行和列编号) 以下是我到目前为止得到的信息: def save_rows(filename): with open(filename, 'r') as f: answer = {} f

我已经创建了一个包含不同句子的txt.file,字母的位置之间没有联系,我希望将其保存为Python中的字典,然后使用row和col确定该文件中的任何特定字母

在代码中,我想让Python问两个问题来确定一个特定的字母:

  • 询问要查找的文件
  • 询问两个坐标(行和列编号)
  • 以下是我到目前为止得到的信息:

    def save_rows(filename):           
        with open(filename, 'r') as f:
            answer = {}
            for line in f:
                line = line.split()
                if not line:  # empty line?
                    continue
                answer[line[0]] = line[1:]
    
            
    def main():
        filename = input("Input the file:")
        indexed_file = save_rows(filename)
        row = input("Input row-and column number:")
    

    如何从这一点出发?

    一个简单的方法是:

    def get_char_at(文件名、行、列):
    行=int(行)
    col=int(col)
    打开(文件名)为f时:
    lines=f.read().splitlines()
    如果行>=len(行):
    raise KeyError(f“文件{filename}不包含{row}行”)
    如果列>=len(行[行]):
    raise KeyError(f“行{row}不包含{col}字符”)
    返回行[行][列]
    如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
    filename=input('输入文件名:')
    行=输入('输入行:')
    列=输入('输入列:')
    打印(在(文件名、行、列)处获取字符)
    
    f.read().splitlines()
    很方便,因为它会自动删除每行末尾的换行符。这里需要注意的主要问题是列表(如
    )和字符串(如
    中的每个项目)都是可索引的<代码>行[行]获取所需的行,而
    行[行][col]
    获取该行中的字符。Python中的索引是从零开始的,所以正如所写的那样,提供
    0
    0
    将获得文件中的第一个字符。如果你愿意的话,你可以根据需要从1开始减去1

    注意:这是一种简单的方法,但不一定是最简单的方法。主要的缺陷是,这会立即将整个文件读入内存。对于大小合理的文本文件,这通常很好。如果您需要处理非常大的文件,那么迭代它的行比一次读取所有行更有效。但是这样你就不能直接索引到你需要的行。因此,
    get\u char\u at
    可能看起来像:

    def get_char_at(文件名、行、列):
    行=int(行)
    col=int(col)
    打开(文件名)为f时:
    对于索引,枚举(f)中的行:
    如果索引==行:
    如果col>=len(行)-1:#减去以说明换行
    raise KeyError(f“行{row}不包含{col}字符”)
    返回线[列]
    raise KeyError(f“文件{filename}不包含{row}行”)
    
    您可以循环浏览文件的行<代码>枚举提供当前所在行的索引。如果得到了正确的行,则返回字符(假设它有足够的字符)。另一方面,如果您在没有到达指定行的情况下浏览了整个文件,那么它显然没有那么多行。

    您可以尝试使用:

    导入行缓存
    def main():
    filename=input(“输入文件:”)
    行数,列数=[int(x)表示输入中的x(“输入行和列数:”).split()]
    line=linecache.getline(文件名,行数)
    linecache.clearcache()
    如果不是line.strip()和col_num>0和col_num
    • linecache.getline()
      打开文件并获取所需的行
    • linecache.clearcache()
      用于修改之前读取的行(例如,通过编辑文件)并希望读取(并缓存)修改后的行
    • not line.strip()
      仅跳过带空格的行(有关详细信息,包括如何检查空行,请参阅)
    • 假设用户使用
      1
      指定第一列,则需要使用
      col_num-1
    如果要在
    dict
    中保存不只有空格的行,可以将
    save_rows()
    简化为:

    def保存行(文件名):
    打开(文件名)为f时:
    返回{i:line for i,如果line.strip(),则返回枚举(f)中的行]
    
    这样,您将拥有一个
    dict
    ,带有
    行号和

    编辑(基于评论中的提问):要实现关于允许输入的一些逻辑,您可以尝试:

    导入系统 尽管如此: 用户输入=输入(“输入行和列编号:”) 如果用户输入=退出: sys.exit() 尝试: line_num,col_num=[user_input.split()中x的int(x)] 除值错误外: 打印('输入无效。请重试') 其他: 打破 打印(行数、列数)

    上面的部分将等待用户输入有效的输入。在这种情况下,这正好是两个数字。如果用户未提供有效输入,将打印一条消息,并再次提示用户提供两个数字。如果用户输入的数字少于或多于两个,则会引发
    ValueError
    。如果用户不输入数字,也会发生同样的情况。最后,用户输入
    exit
    程序
    exit
    s。如果您不想让用户有多个机会输入有效的输入(但只有一个),您可以删除
    ,而

    dict
    从文件的行中删除是不必要的复杂操作,至少对于这个特定问题是这样的。在代码中其他地方要做的事情是否需要这种结构?嗨,不,我不需要这种结构,但我需要学习如何做。然而,现在我更感兴趣的是如何找到哪个字母在两个坐标上。你似乎在你的行中循环,但没有停在指定的行上。Col看起来不错,但请记住,用户可以提供Colu