读取txt文件内容两两结合,存储为dat文件

例如读取a.txt内容转化存储为c.dat
a.txt内容如下
1adcffa555
1dfacab555
c.dat内容如下
1a dc ff a5 55 1d fa ca b5 55
求Python或者c语言实现

你好,请问c.dat你是想输出成文本文件还是二进制文件?

不知道你的问题解决没有,下面的代码使用c语言来完成了你的需求,你参考一下

#include <stdio.h>
#include <stdlib.h>
int main() {
    FILE *fp1 = fopen("a.txt", "r"); // 打开 a.txt 文件
    FILE *fp2 = fopen("c.dat", "wb"); // 打开 c.dat 文件
    char *str = NULL; // 存储从 a.txt 文件中读取的字符串
    unsigned long long num; // 存储转换后的十六进制数
    unsigned char byte; // 存储要写入到 c.dat 文件中的字节
    int len = 0; // 存储字符串的长度
    int ch; // 存储从 a.txt 文件中读取的字符
    while ((ch = fgetc(fp1)) != EOF) { // 从 a.txt 文件中读取一个字符
        if (ch == '\n' || ch == ',') { // 如果遇到换行符或逗号,表示一个字符串结束
            str[len] = '\0'; // 在字符串末尾添加结束符
            sscanf(str, "%llx", &num); // 将字符串转换为十六进制数
            for (int i = len / 2 - 1; i >= 0; i--) { // 将十六进制数分成 len / 2 个字节
                byte = (num >> (i * 8)) & 0xff; // 获取第 i 个字节
                fwrite(&byte, sizeof(byte), 1, fp2); // 将字节写入到 c.dat 文件中
            }
            len = 0; // 重置字符串长度为零
        } else { // 如果不是换行符或逗号,表示一个字符串还未结束
            str = realloc(str, len + 1); // 分配 len + 1 大小的内存给 str
            str[len] = ch; // 将字符存入 str 中
            len++; // 增加字符串长度
        }
    }
    if (len > 0) { // 如果最后一个字符串没有换行符或逗号,需要额外处理一次
        str[len] = '\0'; // 在字符串末尾添加结束符
        sscanf(str, "%llx", &num); // 将字符串转换为十六进制数
        for (int i = len / 2 - 1; i >= 0; i--) { // 将十六进制数分成 len / 2 个字节
            byte = (num >> (i * 8)) & 0xff; // 获取第 i 个字节
            fwrite(&byte, sizeof(byte), 1, fp2); // 将字节写入到 c.dat 文件中
        }
    }
    free(str); // 释放 str 所占用的内存
    fclose(fp1); // 关闭 a.txt 文件
    fclose(fp2); // 关闭 c.dat 文件
    return 0;
}

img



```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    // 打开 a.txt 文件并读取内容
    FILE* in = fopen("a.txt", "r");
    char buffer[1024];
    char* content = NULL;
    size_t content_size = 0;
    while (fgets(buffer, sizeof(buffer), in) != NULL) {
        content = realloc(content, content_size + strlen(buffer));
        strcat(content, buffer);
        content_size += strlen(buffer);
    }
    fclose(in);

    // 将内容转换为二进制数据
    char* binary_data = (char*) malloc(strlen(content) / 2);
    for (int i = 0; i < strlen(content); i += 2) {
        sscanf(&content[i], "%2hhx", &binary_data[i / 2]);
    }

    // 将二进制数据写入 c.dat 文件
    FILE* out = fopen("c.dat", "wb");
    fwrite(binary_data, sizeof(char), strlen(content) / 2, out);
    fclose(out);

    free(content);
    free(binary_data);
    return 0;
}


```

可以借鉴下‘

file_name=r'/home/user/python/dataset/model_data5.txt'
 
file=open(file_name,'r')
data = file.read()#read the whole binary file to string
file.close()
 
data =data.replace('\n','').replace('\t','')
# data = data.expandtabs(0)可以将tab消去
# print(data)
 
file_name1 =  "weight1.dat"
file1 = open(file_name1, 'w')
num=0
weight_len=9
i=0
 
# a='00001101'
# int_10=int(a,2)
# print(int_10)
# aaa=struct.pack("string", a)
# print(int(a))
 
 
 
while num<=len(data)-weight_len:
    a=data[num:num+weight_len]
    print(a)
    data_bin=int(a,2)
    print(data_bin)
 
 
    # b=hex(int(a))[2:].zfill(9)
    # file1.write(hex(b)[2:].zfill(4))
    # print(b)
    file1.write('@')
    file1.write(hex(i)[2:].zfill(4))
    file1.write('\n')
    file1.write(hex(int(data_bin))[2:].zfill(8))  # zfill(8) stardard hex
    file1.write('\n')
    i+=1
    num += 9
file1.close()
 
 
 
 

还没解决的话,待会我可以用c帮你实现

引用chatGPT作答,以下是一个Python实现的代码,它可以将a.txt文件中的每两行内容结合,将它们合并为一个字符串,并将其写入c.dat文件中。

with open("a.txt", "r") as f1, open("c.dat", "wb") as f2:
    # 读取文件a.txt的内容
    lines = f1.readlines()
    
    # 将每两行内容合并为一个字符串
    merged_lines = [lines[i].strip() + lines[i+1].strip() for i in range(0, len(lines), 2)]
    
    # 将合并后的内容转换为二进制并写入文件c.dat中
    for line in merged_lines:
        f2.write(bytes.fromhex(line))

在此代码中,我们使用了Python中的open函数打开两个文件,一个是读取文件(a.txt),另一个是写入文件(c.dat)。然后,我们使用readlines函数读取a.txt文件的内容,并使用strip函数去掉每行末尾的换行符。接下来,我们将每两行内容合并为一个字符串,并使用fromhex函数将其转换为二进制。最后,我们将转换后的内容写入c.dat文件中,这里使用了write函数和bytes类型。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是Python代码实现:

# 打开需要读取的文件和保存的文件
with open('a.txt', 'r') as f_read, open('c.dat.txt', 'w') as f_write:
    # 读取文件内容
    content = f_read.read()
    # 将每两个字符组合在一起,以空格分隔
    data = ' '.join([content[i:i+2] for i in range(0, len(content), 2)])
    # 写入保存文件
    f_write.write(data)

以上是将a.txt文件中的内容两两组合并保存为c.dat.txt文件的代码实现。如果需要将内容保存为二进制格式的.dat文件,可以使用以下代码:

# 打开需要读取的文件和保存的文件
with open('a.txt', 'r') as f_read, open('c.dat', 'wb') as f_write:
    # 读取文件内容
    content = f_read.read()
    # 转换为二进制格式
    data = bytes.fromhex(content)
    # 写入保存文件
    f_write.write(data)

以上代码实现了将a.txt文件中的内容转换为二进制格式,并以c.dat文件保存的功能。
如果我的回答解决了您的问题,请采纳!

以下是Python实现:


with open('a.txt', 'r') as f:
    lines = f.readlines()

data = []
for i in range(0, len(lines), 2):
    combined_line = lines[i].strip() + lines[i+1].strip()
    byte_vals = bytes.fromhex(combined_line)
    data.extend(byte_vals)

with open('c.dat', 'wb') as f:
    f.write(bytearray(data))

首先,使用open()函数打开文件'a.txt'并读取所有行。然后,使用循环将每两行相加并转换为十六进制字节值,将结果存储在一个列表中。最后,使用open()函数创建文件'c.dat'并将字节数据写入该文件中。

GPT的参考

# 打开文件并读取内容
with open('a.txt', 'r') as f:
    data = f.readlines()

# 将内容两两结合
new_data = ''
for i in range(0, len(data), 2):
    new_data += data[i].strip() + data[i+1].strip()

# 将新内容写入dat文件
with open('c.dat', 'wb') as f:
    f.write(bytes.fromhex(new_data))

GPT的参考

# 打开文件并读取内容
with open('a.txt', 'r') as f:
    data = f.readlines()

# 将内容两两结合
new_data = ''
for i in range(0, len(data), 2):
    new_data += data[i].strip() + data[i+1].strip()

# 将新内容写入dat文件
with open('c.dat', 'wb') as f:
    f.write(bytes.fromhex(new_data))

Python 实现:

Python 实现:

Copy
with open('a.txt', 'r') as f1:
    with open('c.dat', 'wb') as f2:
        for line in f1:
            hex_str = ''.join([hex(ord(c))[2:].zfill(2) for c in line.strip()])
            f2.write(bytes.fromhex(hex_str))

C 语言实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LINE_LEN 1024

int main() {
    FILE *f1, *f2;
    char line[MAX_LINE_LEN], hex_str[MAX_LINE_LEN * 2], *p;
    int i, val;

    f1 = fopen("a.txt", "r");
    f2 = fopen("c.dat", "wb");

    while (fgets(line, MAX_LINE_LEN, f1)) {
        p = hex_str;
        for (i = 0; i < strlen(line); i++) {
            val = (int)line[i];
            sprintf(p, "%02x", val);
            p += 2;
        }
        fwrite(hex_str, strlen(hex_str) / 2, 1, f2);
    }

    fclose(f1);
    fclose(f2);

    return 0;
}

这两个实现的思路基本相同,都是先读取 a.txt 文件中的每一行,然后将每个字符转化为对应的 16 进制字符串,最后将所有的 16 进制字符串拼接在一起,再将其转化为字节流写入 c.dat 文件中。

这里提供一个Python实现的方法,可以将a.txt中的内容两两结合后存储为c.dat:

with open("a.txt", "r") as file:
    content = file.read().strip()

pairs = [content[i:i+2] for i in range(0, len(content), 2)]

with open("c.dat", "w") as file:
    file.write(' '.join(pairs))

以下是C语言实现的方法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    FILE *input, *output;
    char input_filename[] = "a.txt";
    char output_filename[] = "c.dat";
    char c;
    char buffer[3] = {0};
    int count = 0;

    input = fopen(input_filename, "r");
    if (input == NULL) {
        printf("Error opening %s\n", input_filename);
        exit(1);
    }

    output = fopen(output_filename, "w");
    if (output == NULL) {
        printf("Error opening %s\n", output_filename);
        fclose(input);
        exit(1);
    }

    while ((c = fgetc(input)) != EOF) {
        buffer[count++] = c;
        if (count == 2) {
            buffer[count] = '\0';
            fprintf(output, "%s ", buffer);
            count = 0;
        }
    }

    fclose(input);
    fclose(output);
    return 0;
}

这段代码分别使用Python和C语言实现了将a.txt中的内容两两结合后存储为c.dat的功能。