比较两个文本文件,打印出它们第一个不相同的行。(每行不多于50个字符) 【输入形式】 无输入,两个文件名为file1.txt,file2.txt,可直接读取 【输出形式】 不相同的两行 【样例输入】 文件1: aaaaaaaaaa bbbbbbbbb ccccccccccc ddddddddd 文件2: aaaaaaaaaa bbbbbbbbb cccc ddddddddd 【样例输出】 ccccccccccc cccc
时间: 2023-11-29 16:04:39 浏览: 61
这是一道经典的文件比较问题,以下是Python实现此功能的代码:
```python
with open('file1.txt') as f1, open('file2.txt') as f2:
for line1, line2 in zip(f1, f2):
if line1 != line2:
print(line1.rstrip('\n'))
print(line2.rstrip('\n'))
break
```
解释一下代码:
- `with open('file1.txt') as f1, open('file2.txt') as f2:` 打开两个文件并将它们分别赋值给变量 `f1` 和 `f2`。
- `for line1, line2 in zip(f1, f2):` 使用 `zip` 函数将两个文件对象并行迭代,每次迭代得到两个文件的一行,并将它们分别赋值给变量 `line1` 和 `line2`。
- `if line1 != line2:` 如果两行不相同,则输出这两行并结束循环。
- `print(line1.rstrip('\n'))` 输出第一个不相同的行,并去除行末的换行符。
- `print(line2.rstrip('\n'))` 输出第二个不相同的行,并去除行末的换行符。
- `break` 结束循环。
相关问题
请写一段C语言代码:比较两个文本文件并打印出它们第一个不相同的行(文件每行字符数不多于80)
以下是一个简单的实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LENGTH 80
int main() {
FILE *fp1, *fp2;
char file1[MAX_LINE_LENGTH + 1], file2[MAX_LINE_LENGTH + 1];
fp1 = fopen("file1.txt", "r");
fp2 = fopen("file2.txt", "r");
int line_num = 0;
while (fgets(file1, MAX_LINE_LENGTH + 1, fp1) != NULL && fgets(file2, MAX_LINE_LENGTH + 1, fp2) != NULL) {
line_num++;
if (strcmp(file1, file2) != 0) {
printf("Line %d: \nFile 1: %sFile 2: %s", line_num, file1, file2);
break;
}
}
fclose(fp1);
fclose(fp2);
return 0;
}
```
在这个实现中,我们假设 `file1.txt` 和 `file2.txt` 都在当前目录中。首先,我们打开这两个文件。然后,我们使用 `fgets()` 函数逐行读取两个文件的内容,并将其存储在 `file1` 和 `file2` 变量中。我们使用 `strcmp()` 函数比较这两个变量的内容。如果它们不同,我们打印出它们的内容和行号,然后退出循环。
注意,我们假设这两个文件的行数相同。如果它们的行数不同,我们可能会遇到文件结束的情况,这在代码中没有处理。此外,我们还假设每行字符数不多于 80。如果这个限制不适用于你的文件,请相应地更改 `MAX_LINE_LENGTH` 常量的值。
比较两个文本文件,打印出它们第一个不相同的行。(每行不多于50个字符) 【输入形式】 无输入,两个文件名为file1.txt,file2.txt,可直接读取 【输出形式】 不相同的两行c语言
代码如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 50
int main() {
FILE *fp1, *fp2;
char line1[MAX_LEN + 1], line2[MAX_LEN + 1];
int line_num = 1;
int flag = 0;
fp1 = fopen("file1.txt", "r");
fp2 = fopen("file2.txt", "r");
while (fgets(line1, MAX_LEN, fp1) != NULL && fgets(line2, MAX_LEN, fp2) != NULL) {
if (strcmp(line1, line2) != 0) {
printf("line %d: %s", line_num, line1);
printf("line %d: %s", line_num, line2);
flag = 1;
break;
}
line_num++;
}
if (!flag) {
printf("No difference found.\n");
}
fclose(fp1);
fclose(fp2);
return 0;
}
```
注:该程序只比较两个文件的前n行,n为两个文件中行数较小的那个。如果需要比较全部行,需要在while循环中分别加上feof()判断。
阅读全文