解释原始二进制数据的输入并提取某些值(python)

问题描述 投票:0回答:1

我正在创建一个 Python 程序,需要一些帮助。我正在创建的程序就是这样工作的。

用户从文件中输入 0 和 1 的原始二进制输入。然后我必须能够以特定的方式读取这些数据。我想分别读取每一行(180个二进制数字长,多行)并跳过每行的前30个二进制数和最后30个二进制数。然后,我将存储收集到的数据(每行),缺少前 30 位和后 30 位数字。这将在 .txt 文件中输出给用户。我知道如何从文件中读取并写入文件,但我不知道如何保存或写入我只感兴趣的数据。

这是我到目前为止所拥有的,以便用户可以输入他们的文件:

filename = input("What is the name of your file:")
fi = open(filename, "r")

这虽然不多,但我还是缺乏解释数据的知识。

这是一个简短的示例(忽略前 3 位和后 3 位数字):

假设文件binary.txt包含以下内容:

000111000111000111
111000111000111000

运行我的程序,输出或新保存的文件将包含:

111000111000
000111000111

我还没有找到一种方法来解释我需要的二进制数据,所以我没有尝试任何解决方案。将每一行二进制文件转换为列表可能有助于确定我想要提取的数据的位置。这是正确的方法吗?可以实现吗?

python binary
1个回答
0
投票

这段代码定义了一个函数

process_binary_line
process_binary_line
函数检查每行是否为 180 个字符长。如果没有,它会引发
ValueError
,并且
main
循环捕获此错误,打印错误消息,并继续处理下一行。

main
函数负责读取输入文件、处理每一行并将结果写入输出文件。

将此代码保存到 Python 文件(例如,

process_binary.py
)并运行它。它将提示您输入文件,按指定处理数据,并将结果保存到
processed_output.txt

这是代码;请根据您的需要进行更改。

def process_binary_line(line):
    if len(line) == 180:
        return line[30:-30]
    else:
        raise ValueError("Each line should be 180 characters long.")

def main():
    filename = input("What is the name of your file: ")

    try:
        with open(filename, "r") as file:
            lines = file.readlines()

        processed_lines = []

        for line_number, line in enumerate(lines, start=1):
            try:
                processed_line = process_binary_line(line.strip())
                processed_lines.append(processed_line)
            except ValueError as e:
                print(f"Error in line {line_number}: {e}")
                continue

        output_filename = "processed_output.txt"

        with open(output_filename, "w") as output_file:
            for processed_line in processed_lines:
                output_file.write(processed_line + "\n")

        print(f"Processed data saved to {output_filename}")

    except FileNotFoundError:
        print(f"Error: File '{filename}' not found.")

if __name__ == "__main__":
    main()
© www.soinside.com 2019 - 2024. All rights reserved.