Python决定从一个文件到另一个文件

时间:2018-03-20 18:00:03

标签: python binary decimal

我遇到了python脚本的一些问题。我对这种语言并不擅长,因为我正在为我的朋友做点什么。

代码正在运行,但输出很奇怪。一些随机的东西而不是二进制数。

以下是代码:

def decToBin(n):
    wynik = ""
    while n > 0:
        wynik = str(n % 2) + wynik
        n = n / 2
    return wynik
print("zamiana liczb z systemu dziesietnego na binarny")
with open('program.txt', 'r') as plik: # otwieramy plik do odczytu
    for line in plik:
        x=int(line)
        with open('wyniki.txt', 'w') as plik1:
            plik1.write(decToBin(x))
        plik1.close()
plik.close()

这是脚本的链接: repl.it

/编辑 好了,想通了,现在这里是代码:

def decToBin(n):
wynik = ""
while n > 0:
    wynik = str(n % 2) + wynik
    n = int(n/2)
return wynik
plik1=open('wyniki.txt', 'w')
print("zamiana liczb z systemu dziesietnego na binarny")
with open('program.txt', 'r') as plik:  # otwieramy plik do odczytu
    for line in plik:
    x = int(line)
    plik1.write(decToBin(x)) 
    plik1.write("\n")  
plik1.close()

2 个答案:

答案 0 :(得分:1)

首先要做的事情是:已经有一些东西正是你正在尝试做的事情,所以使用它是明智和有效的:

for char in text:
     bin(int(char))

我猜你的代码中的问题是你正在使用Python 3.x,其中整数之间的标准除法返回一个浮点数(从[https://www.python.org/dev/peps/pep-0238/][PEP-0238]开始)。 以下是关于如何更改功能以使其工作的建议。您可以根据内置的 bin 功能进行检查:

def decToBin(n):
    wynik = ""
    while n > 0:
        wynik = str(n % 2) + wynik
        n = n // 2
    return wynik

答案 1 :(得分:0)

这是为文本示例执行此操作的方法 - Python不会像Java / C那样将字符转换为int。相反,您将获得序数值,然后将其转换为二进制数

def to_bin(c):
    bin_rep = bin(ord(c))
    print bin_rep   # for testing
    return bin_rep  # can be written to a file here or not...

text = "Hello there"
for each_char in text:
    to_bin(each_char)

我认为这种方法值得尝试使用输入文件的示例,然后重构为r / w文件。

要对文件执行此操作,请尝试以下操作:

write_str = ""
with open('program.txt', 'r') as plik: # otwieramy plik do odczytu
    for line in plik:
        for each_char in line:
            write_str += str(to_bin(each_char))
with open('wyniki.txt', 'w') as plik1:
    plik1.write(write_str)
    plik1.close()
plik.close()

如果您想要反转字节的顺序,整个文件可以反转或更改     write_str + = str(to_bin(each_char)) 至     write_str = str(to_bin(each_char))+ write_str