python-3.x - 如何解决“findall()缺少1个必需的位置参数:'string'”在python中读取文件的错误?
问题描述
我想使用关键字从两个 .txt 文件中提取特定行,并将找到的整个行写入另一个 output.txt 文件。这是我想要的文件的一个例子:
我的输入文件如下:
输入1.txt
A 中的孔限制直径:3.95 A 中的最大孔径:8.02 系统在 1 维(通道)中渗透
Input2.txt
A 中的孔限制直径:4.15 A 中的最大孔径:7.02 系统在一维(通道)中渗透
我的 output.txt 文件必须如下所示:
A 中的孔限制直径:3.95 ##### A 中的最大孔径:8.02(* 来自 input1.txt)
A 中的孔限制直径:4.15 ##### A 中的最大孔径:7.02(* from input2.txt)
我写了如下代码:
import re
filenames = [f"result{i}.txt" for i in range(1,3)]
with open ("output.txt", "w") as outputfiles:
for file in filenames:
with open (file) as inputfile:
content = inputfile.read()
desired = re.findall('Pore limiting diameter in A.*|Maximum pore diameter in A.*')
for line in desired:
outputfiles.writelines(line + ' ###### ')
我怎么解决这个问题?
非常感谢
解决方案
Mohammad,您编写的代码存在一些问题。
1、re.findall 的格式如下re.findall('search Pattern', text to search)
你的命令缺少要搜索的文本。因此将行更改为desired = re.findall('Pore limiting diameter in A.*|Maximum pore diameter in A.*', contents)
2。根据您的示例文本文件,搜索模式不正确,应将其更改为 ```'A 中的孔限制直径:|A 中的最大孔径: '` ` 3. for 循环输出数据需要在代码的文件读取元素下缩进。
4. 您未能在输出数据中包含数据来源。
以下是您的代码在进行这些更改后的外观:
import re
filenames = [f"result{i}.txt" for i in range(1,3)]
with open ("output.txt", "w") as outputfiles:
for file in filenames:
with open (file) as inputfile:
content = inputfile.read()
desired = re.findall('Pore limiting diameter in A:*|Maximum pore diameter in A:*', contents)
for line in desired:
outputfiles.writelines(f"{line[0]} ###### {line[1]}(* from {file})")
推荐阅读
- java - 我正在使用 Kotlin 修改 Java,但我正在努力修复错误的部分(编辑)
- java - 使用 itext 将不同的文件格式合并为单个 pdf 会导致 pdf 损坏
- laravel - 资源视图供应商目录中的 GCloud Laravel 通知自定义模板
- elasticsearch - Elastic Search 测量堆使用情况
- apache-nifi - 如何查找GenerateTableFetch创建的所有文件都已处理
- python - lxml (etree) - 根标签的漂亮打印属性
- macos - 无法在 Mac Os Mojave 上停止或重新启动 Apache
- python - Exchangelib item.sender 返回字节
- python - 如何访问项目类 Scrapy
- .net - 使用实现接口的通用类型参数对不同类型的实例进行拆箱