Python 如何查找具有特定字符串的行号?

Python 如何查找具有特定字符串的行号?,python,python-3.x,Python,Python 3.x,我拼凑了一些代码,在数百个文本文件中循环,并扫描每个文件中的特定字符串。它工作得很好,但我想修改它,找到只包含换行符的行,然后减去这些行。这里有一个例子 1问题 2身份证 3来源 4爱迪乌公司 5身份证号码 6个终端字段 7. 8. 9启动数据 代码: 现在的代码是9,但我想看到7,因为我减去了2行,除了换行符外什么都没有。我以为是这样的:如果不是line.split(): 然而,这似乎对我不起作用。有什么想法吗?考虑一下这段代码 with open(filename) as file:

我拼凑了一些代码,在数百个文本文件中循环,并扫描每个文件中的特定字符串。它工作得很好,但我想修改它,找到只包含换行符的行,然后减去这些行。这里有一个例子

1问题
2身份证
3来源
4爱迪乌公司
5身份证号码
6个终端字段
7.
8.
9启动数据
代码:

现在的代码是9,但我想看到7,因为我减去了2行,除了换行符外什么都没有。我以为是这样的:
如果不是line.split():

然而,这似乎对我不起作用。有什么想法吗?

考虑一下这段代码

with open(filename) as file: 
    linenumber = 0
    for line in file.readlines():
        if line.strip():
            handle_line (linenumber, line)
            linenumber += 1
让python在文件中的行上迭代,这很好。如果您想以不同的方式计算行号,那么很简单,只需维护您自己的行号即可


在这里,我演示如何从开头和结尾删除所有空白,然后查看是否还有剩余内容。如果是这样,那么计算并处理该行。这可能比查找某些特定于操作系统的行编码更可靠。

假设这些行号实际上在数据文件中。那我原来误解了。现在可能是使用正则表达式的时候了

import re
pattern = re.compile(r'(?P<linenumber>\d+) (?P<content>.*)')
with open(filename) as file:
    # maintain your own custom line number
    my_linenumber = 1

    # let python iterate through the lines
    for line in file.readlines():

        # use the regular expressions module to parse the data
        match = pattern.match(line)
        if match and 2==len(match.groups()):
            file_linenumber = match.groups()[0]
            content = match.groups()[1]

            # remove whitespace and see if anything is left
            if content.strip():
                print (my_linenumber, content)
                my_linenumber += 1
重新导入
模式=重新编译(r'(?P\d+('P.*))
打开(文件名)作为文件:
#维护您自己的自定义行号
my_linenumber=1
#让python遍历这些行
对于文件.readlines()中的行:
#使用正则表达式模块解析数据
匹配=模式。匹配(线)
如果match和2==len(match.groups()):
文件\u linenumber=match.groups()[0]
content=match.groups()[1]
#删除空白,看看是否还有剩余内容
如果是content.strip():
打印(我的行号、内容)
my_linenumber+=1
请注意,第8行上有一个额外的空格,因此它不仅仅是\r\n

import os

search_path = r'C:\my_path'
file_type = '.txt'
search_str = 'START-OF-DATA'

# If path does not exist, set search path to current directory.
if not os.path.exists(search_path):
    search_path = "."

for fname in os.listdir(search_path):
    if os.path.splitext(fname)[1] == file_type:
        line_no = 1
        with open(os.path.join(search_path, fname)) as fo:
            for line in (line.rstrip() for line in fo):
                index = line.find(search_str)
                if index != -1:
                    print("{}[{},{}] {}".format(fname, line_no, index, line))
                if line:  # Non-empty line?
                    line_no += 1

print('DONE!!')

line=fo.readline().strip(“\n\r”)
(在两个位置)?grep已经这样做了。学习项目?此外,可能可以跳过文件查找,只需发布函数来检查一个文件,在这里(保持它与问题相关,丢失其余部分)看起来您有一个糟糕的循环条件——如果您看到一个空行,您真的完成了该文件吗?
if(len(line)~=2或line[0]~='\n'或line[1]~='\r'):line\u no+=1
@DDS,我收到“无效语法”消息。@CristiFati,它不起作用。如果我同时替换'line=fo.readline()',似乎会跳过整个过程,只打印'Done!!'。如果我替换第一个'line=fo.readline()',我会得到与最初相同的结果。谢谢大家,但所有这些建议都给了我与最初完全相同的结果。这实际上给了我一个7作为数据行的开始。除非我们有一个误解——行号实际上是打印在文件中的吗?如果该行实际上不是一个空行,那么该检查将不起作用。
import os

search_path = r'C:\my_path'
file_type = '.txt'
search_str = 'START-OF-DATA'

# If path does not exist, set search path to current directory.
if not os.path.exists(search_path):
    search_path = "."

for fname in os.listdir(search_path):
    if os.path.splitext(fname)[1] == file_type:
        line_no = 1
        with open(os.path.join(search_path, fname)) as fo:
            for line in (line.rstrip() for line in fo):
                index = line.find(search_str)
                if index != -1:
                    print("{}[{},{}] {}".format(fname, line_no, index, line))
                if line:  # Non-empty line?
                    line_no += 1

print('DONE!!')