python实现当前目录下所有文件是否包含指定字符串,包含显示内容并且显示文件名和行号
时间: 2024-02-17 13:02:22 浏览: 85
可以使用Python自带的文件处理模块os和re来实现该功能。具体步骤如下:
1. 使用os模块的listdir函数获取当前目录下所有的文件:
```python
import os
files = os.listdir('.')
```
2. 对于每个文件,使用Python自带的文件处理模块open函数打开文件,并逐行读取文件内容,判断是否包含指定的字符串。如果包含,则输出文件名和行号:
```python
import re
search_str = '指定字符串'
for file in files:
if os.path.isfile(file): # 判断是否为文件
with open(file, 'r', encoding='utf-8') as f:
for i, line in enumerate(f):
if re.search(search_str, line): # 判断是否包含指定的字符串
print(f'{file}: {i+1}: {line.strip()}')
```
其中,使用re模块的search函数来进行字符串匹配,enumerate函数来获取每行的行号。
以上就是实现当前目录下所有文件是否包含指定字符串的代码。需要注意的是,如果需要搜索子目录中的文件,可以使用os.walk函数来遍历目录树。
相关问题
python写程序:文本文件 example-1.txt 中有若干行字符串,由数字、字母和特殊字符组成。编写程序输出最 长数字串所在的行号、长度和该数字串,如有并列最长,则输出第一个。其中行号从 0 开始计。 例如,文件中的内容如下: 则输出: 5 7 1009001
好的,我可以为您编写这个程序。您可以将以下代码复制到 Python 环境中并运行:
```python
with open('example-1.txt', 'r') as f:
lines = f.readlines()
max_num_len = 0
max_num_line = 0
for i, line in enumerate(lines):
nums = ''
for char in line:
if char.isdigit():
nums += char
else:
if len(nums) > max_num_len:
max_num_len = len(nums)
max_num_line = i
max_num = nums
nums = ''
if len(nums) > max_num_len:
max_num_len = len(nums)
max_num_line = i
max_num = nums
print(max_num_line, max_num_len, max_num)
```
请确保 example-1.txt 与程序文件在同一目录下,并且文件名与路径正确。程序会读取 example-1.txt 文件中的每一行,找到最长的数字串并输出其所在行号、长度和数字串本身。
希望这可以帮到您!
写一段程序,用python语言实现Excel中每个单元格内的字符串匹配到一个txt文档,然后输出excel每个单元格字符串在txt文档中的对应行数(假若在excel中的字符串长度为4,那么在txtz中匹配到的字符串也得是4,不能是包含这个字符串的所有行)
好的,我理解了你的要求。针对你的问题,我可以给你一些思路:
1. 使用 Python 的 openpyxl 库读取 Excel 文件,并获取每个单元格的字符串内容。
2. 使用 Python 的 re 模块编写正则表达式,匹配文本文件中与 Excel 单元格中字符串相同的行。
3. 将匹配到的行号保存到一个字典中,Excel 单元格内容作为字典的键。
4. 遍历 Excel 中的每个单元格,将匹配到的行号输出到一个新的 Excel 文件中。
下面是这个程序的一个示例实现:
```python
import openpyxl
import re
# 定义 Excel 文件名和工作表名
excel_file = "example.xlsx"
sheet_name = "Sheet1"
# 定义文本文件名和正则表达式
text_file = "example.txt"
regex = r"\b{}\b"
# 读取 Excel 文件
wb = openpyxl.load_workbook(excel_file)
sheet = wb[sheet_name]
# 定义一个字典,保存匹配到的行号
line_numbers = {}
# 遍历 Excel 中的每个单元格
for row in sheet.iter_rows():
for cell in row:
# 获取单元格内容
cell_value = cell.value
# 如果单元格不为空,则在文本文件中查找匹配的行号
if cell_value:
# 构造正则表达式
pattern = regex.format(cell_value)
# 在文本文件中查找匹配的行号
with open(text_file, "r") as f:
for i, line in enumerate(f):
if re.search(pattern, line):
# 将匹配到的行号添加到字典中
if cell_value not in line_numbers:
line_numbers[cell_value] = []
line_numbers[cell_value].append(i+1)
# 将匹配到的行号输出到新的 Excel 文件中
output_file = "output.xlsx"
output_sheet_name = "Output"
output_wb = openpyxl.Workbook()
output_sheet = output_wb.active
output_sheet.title = output_sheet_name
for i, (key, value) in enumerate(line_numbers.items()):
output_sheet.cell(row=i+1, column=1, value=key)
output_sheet.cell(row=i+1, column=2, value=", ".join(map(str, value)))
output_wb.save(output_file)
```
需要注意的是,这个程序中的正则表达式只是一个简单的示例,你可能需要根据实际情况调整正则表达式的内容。此外,为了简化程序,这里假设文本文件中的每一行都可以作为一个单独的字符串进行匹配,但实际情况可能会更加复杂,需要根据具体情况进行调整。
阅读全文