Python:获取字符串索引的行号和列号?

标签 python file text

假设我有一个正在操作的文本文件。像这样的东西(希望这不是太不可读):

data_raw = open('my_data_file.dat').read()
matches = re.findall(my_regex, data_raw, re.MULTILINE)
for match in matches:
    try:
        parse(data_raw, from_=match.start(), to=match.end())
    except Exception:
        print("Error parsing data starting on line {}".format(what_do_i_put_here))
        raise

注意异常处理程序中有一个名为 what_do_i_put_here 的变量。 .我的问题是:如何分配该名称以便我的脚本打印 行号 包含我正在尝试使用的“坏区域”的开头?我不介意重新阅读文件,我只是不知道我会做什么......

最佳答案

这里有一些更清晰的东西,在我看来,比你自己的答案更容易理解:

def index_to_coordinates(s, index):
    """Returns (line_number, col) of `index` in `s`."""
    if not len(s):
        return 1, 1
    sp = s[:index+1].splitlines(keepends=True)
    return len(sp), len(sp[-1])
它的工作方式与您自己的答案基本相同,但通过使用字符串切片 splitlines()实际上计算您需要的所有信息,而无需任何后期处理。
使用 keepends=True必须为行尾字符提供正确的列数。
唯一的额外问题是空字符串的边缘情况,可以很容易地由保护子句处理。
我在 Python 3.8 中对其进行了测试,但在大约 3.4 版之后它可能可以正常工作(在某些旧版本中 len() 计算代码单元而不是代码点,我认为它会因包含 BMP 之外的字符的任何字符串而中断)

关于Python:获取字符串索引的行号和列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495713/

相关文章:

c++ - (C++)将 vector 保存到.txt数据库中的问题

java - 以高压缩率通过网络发送文本文件

html - 在链接鼠标悬停事件上显示文本

python - 将 pandas 系列从 str 转换为 float 时,是否有一种方法可以跳过不可转换的行?

C - 在文件的第二行写入

c - 如何从c中的文件中读取日期

android Staticlayout 绘制文字模糊

python - 为 google bigquery 构建一个 docker 镜像

python - 为什么我只能从 statsmodels OLS 拟合中获得一个参数

python - 来自 python-osc 客户端的 OSC 消息未被 ChucK 服务器接收