帮我写一个python对比文件的脚本 在把两个文件不一样的地方输出出来
时间: 2023-06-03 08:06:54 浏览: 204
好的,以下是Python对比文件的脚本代码,您可以将两个文件的路径作为参数传递给该脚本,脚本会输出这两个文件不同的内容:
```python
import sys
if len(sys.argv) != 3:
print("Usage: python compare_files.py file1 file2")
sys.exit(1)
file1 = sys.argv[1]
file2 = sys.argv[2]
with open(file1, 'r') as f1, open(file2, 'r') as f2:
lines1 = f1.readlines()
lines2 = f2.readlines()
for num, (line1, line2) in enumerate(zip(lines1, lines2)):
if line1 != line2:
print(f"Line {num+1} is different:")
print(f" {file1} > {line1.strip()}")
print(f" {file2} > {line2.strip()}")
```
请注意,在执行此脚本之前,您需要确定两个文件的编码格式相同。如果不同,那么您需要对文件内容进行转换,以确保可以正确比较。
相关问题
使用python,对比两个文件夹中的文件,其中一个文件夹里全是docx文件,另一个全部是pdf文件,两种文件完全一样则不考虑,如果找不到则复制该文件到第三个文件夹中
以下是一个使用Python实现你描述功能的脚本:
```python
import os
import shutil
from docx import Document
from PyPDF2 import PdfFileReader
def compare_docx(file1, file2):
"""比较两个docx文件内容"""
doc1 = Document(file1)
doc2 = Document(file2)
paragraphs1 = [para.text for para in doc1.paragraphs]
paragraphs2 = [para.text for para in doc2.paragraphs]
return paragraphs1 == paragraphs2
def compare_pdf(file1, file2):
"""比较两个PDF文件内容"""
with open(file1, 'rb') as f1, open(file2, 'rb') as f2:
pdf1 = PdfFileReader(f1)
pdf2 = PdfFileReader(f2)
num_pages1 = pdf1.getNumPages()
num_pages2 = pdf2.getNumPages()
if num_pages1 != num_pages2:
return False
for page_num in range(num_pages1):
page1 = pdf1.getPage(page_num).extractText()
page2 = pdf2.getPage(page_num).extractText()
if page1 != page2:
return False
return True
def find_differences(folder1, folder2, output_folder):
"""查找两个文件夹中的差异文件并复制到输出文件夹"""
for root, dirs, files in os.walk(folder1):
for file in files:
if file.endswith('.docx'):
file_path = os.path.join(root, file)
corresponding_pdf = os.path.splitext(file_path)[0] + '.pdf'
if not os.path.exists(corresponding_pdf):
output_path = os.path.join(output_folder, 'docx', os.path.relpath(file_path, folder1))
os.makedirs(os.path.dirname(output_path), exist_ok=True)
shutil.copy(file_path, output_path)
elif not compare_docx(file_path, corresponding_pdf):
output_path = os.path.join(output_folder, 'docx', os.path.relpath(file_path, folder1))
os.makedirs(os.path.dirname(output_path), exist_ok=True)
shutil.copy(file_path, output_path)
for root, dirs, files in os.walk(folder2):
for file in files:
if file.endswith('.pdf'):
file_path = os.path.join(root, file)
corresponding_docx = os.path.splitext(file_path)[0] + '.docx'
if not os.path.exists(corresponding_docx):
output_path = os.path.join(output_folder, 'pdf', os.path.relpath(file_path, folder2))
os.makedirs(os.path.dirname(output_path), exist_ok=True)
shutil.copy(file_path, output_path)
elif not compare_pdf(file_path, corresponding_docx):
output_path = os.path.join(output_folder, 'pdf', os.path.relpath(file_path, folder2))
os.makedirs(os.path.dirname(output_path), exist_ok=True)
shutil.copy(file_path, output_path)
# 使用示例
folder1 = 'path/to/folder/with/docx/files'
folder2 = 'path/to/folder/with/pdf/files'
output_folder = 'path/to/output/folder'
find_differences(folder1, folder2, output_folder)
```
这个脚本做了以下几件事:
1. 定义了两个函数 `compare_docx` 和 `compare_pdf` 来比较 .docx 和 .pdf 文件的内容。
2. 定义了 `find_differences` 函数,它会遍历两个输入文件夹,比较文件内容,并将差异文件复制到输出文件夹中。
3. 在 `find_differences` 函数中,它会分别处理 .docx 和 .pdf 文件,检查对应的配对文件是否存在,以及内容是否相同。
4. 如果没有找到对应的配对文件,或者文件内容不相同,就会将文件复制到输出文件夹的相应子文件夹中。
5. 最后,提供了使用示例,你需要将 `folder1`, `folder2` 和 `output_folder` 替换为实际的文件路径。
请注意,这个脚本使用了 `python-docx` 和 `PyPDF2` 库来处理 .docx 和 .pdf 文件。你可能需要先安装这些库:
```
pip install python-docx PyPDF2
```
此外,这个脚本假设 .docx 和 .pdf 文件的命名方式相似,例如 `document.docx` 和 `document.pdf`。如果你的文件命名方式不同,你可能需要调整配对文件的查找逻辑。
帮我写一份可以从directory中按文件名开头所含数字顺序获取多个含有六个工作表的excel文件中特定工作表特定格子数据的Python代码并输出成列表
当然,下面是一个示例Python代码片段,它会从指定目录中查找以数字开头的工作簿(假设每个Excel文件有6个工作表),提取特定工作表的特定单元格数据,并将结果存储在一个列表中:
```python
import os
import pandas as pd
# 指定目录路径
dir_path = 'your_directory_path' # 替换为实际的目录路径
# 定义数字前缀,这里我们假设所有工作簿是以两位数字开头
file_prefix = '01'
sheet_name = 'Sheet1' # 需要提取数据的工作表名称
cell_range = 'A1:B10' # 提取的具体单元格范围
# 正则表达式匹配文件名
regex = r'^{}(\d{2}).xls?$'.format(file_prefix)
# 获取所有符合条件的Excel文件
files = [f for f in os.listdir(dir_path) if re.match(regex, f)]
data_list = []
for file in files:
excel_file = dir_path + '/' + file
df = pd.read_excel(excel_file)
# 提取指定工作表的数据
sheet_df = df[sheet_name]
# 提取指定的单元格数据
data = sheet_df[cell_range].values.tolist()
data_list.append(data)
# 输出到列表
print("提取的数据列表:")
print(data_list)
# 如果需要输出成CSV或其他格式,可以添加额外的代码处理这部分
```
记得将`your_directory_path`替换为实际的文件夹路径。这个脚本假定所有Excel文件是.xls格式(如果不是,请修改`read_excel`函数的文件扩展名)。如果有其他特殊情况,比如工作表索引或单元格范围不一样,也需相应调整。
阅读全文