python print()函数中的新行

2024-04-23 09:18:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python2.7.3,我正在编写一个脚本,打印任何用户定义文件的十六进制字节值。它可以正确地处理一个问题:每个值都被打印在一个新的行上。是否可以用空格而不是新行打印值?

例如,代替

61

62

我想要61 62

下面是我的代码(..txt是一个包含文本'abcd'的文件):

#!usr/bin/python
import os
import sys
import time

filename = raw_input("Enter directory of the file you want to convert: ")

f = open(filename, 'rb')
fldt = f.read()
lnfl = len(fldt)
print "Length of file is", lnfl, "bytes. "
orck = 0
while orck < lnfl:
    bndt = hex(ord(fldt[orck]))
    bndt = bndt[-2:]
    orck = orck + 1
    ent = chr(13) + chr(10)
    entx = str(ent)
    bndtx = str(bndt)
    bndtx.replace(entx, ' ')
    print bndtx

Tags: 文件ofimportfilenamefileprintstrchr
2条回答

这几乎可以满足您的所有需求:

f = open('data.txt', 'rb')

while True:
    char = f.read(1)
    if not char: break
    print "{:02x}".format(ord(char)),

创建的data.txt如下:

f = open('data.txt', 'wb')
f.write("ab\r\ncd")
f.close()

我得到以下输出:

61 62 0d 0a 63 64

tl;dr--1。您使用的变量名很差。2。你的十六进制字符串切片不正确。三。您的代码永远不会替换任何换行符。你可能只是想忘记那个功能。您还不完全理解字符、其整数代码和表示整数的十六进制字符串之间的区别。它们都是不同的:两个是字符串,一个是整数,它们都不相等。四。对于某些文件,不应删除换行符。

==

1。你的变量名太可怕了。

如果你不想问任何人问题那就好了。但由于每个人都需要提问,所以需要使用任何人都能理解的描述性变量名。您的变量名只比这些稍好一点:

fname = 'data.txt'
f = open(fname, 'rb')
xxxyxx = f.read()

xxyxxx = len(xxxyxx)
print "Length of file is", xxyxxx, "bytes. "
yxxxxx = 0

while yxxxxx < xxyxxx:
    xyxxxx = hex(ord(xxxyxx[yxxxxx]))
    xyxxxx = xyxxxx[-2:]
    yxxxxx = yxxxxx + 1
    xxxxxy = chr(13) + chr(10)
    xxxxyx = str(xxxxxy)
    xyxxxxx = str(xyxxxx)
    xyxxxxx.replace(xxxxyx, ' ')
    print xyxxxxx

那个程序运行良好,但不可能理解。

2。函数的作用是:产生不同长度的字符串。

例如

print hex(61)
print hex(15)

--output:--
0x3d
0xf

对每个字符串取切片[-2:]可以得到:

3d
xf

看你怎么在第二个字母里找到了“x”?切片:

[-2:] 

表示转到字符串的末尾并备份两个字符,然后获取字符串的其余部分。与其这样做,不如从开始处将切片从3个字符开始:

[2:]  

3。您的代码永远不会替换任何换行符。

假设您的文件具有以下两个连续字符:

"\r\n"

现在读入第一个字符,“\r”,并将其转换为整数ord(“\r”),得到整数13。现在把它转换成一个字符串hex(13),它给你一个字符串"0xd",然后切掉前两个字符:

"d"

接下来,代码中的这一行:

bndtx.replace(entx, ' ')

尝试在字符串"d"中查找字符串"\r\n"的每个匹配项并替换它。不会有任何替换,因为替换字符串是两个字符长,而字符串"d"是一个字符长。

替换也不适用于"\r\n""0d"。但至少现在它有可能工作,因为两个字符串都有两个字符。让我们将这两个字符串缩减为一个共同的分母:ascii码。“\r”的ascii码是13,“\n”的ascii码是10。那么字符串"0d"呢?字符"0"的ascii代码是48,字符“d”的ascii代码是100。这些字符串没有一个共同的字符。即使这样也不行:

 x = '0d' + '0a'
 x.replace("\r\n", " ")
 print x

 --output:--
 '0d0a'

这也不会:

x = 'd' + 'a'
x.replace("\r\n", " ")
print x

--output:--
da

底线是:将一个字符转换成一个整数,然后再转换成一个十六进制字符串,最终并不会得到原始字符——它们只是不同的字符串。所以如果你这样做:

char = "a"
code = ord(char)
hex_str = hex(code)

print char.replace(hex_str, " ")

…你不能指望“a”被一个空格代替。如果在此处检查输出:

char = "a"
print repr(char)

code = ord(char)
print repr(code)

hex_str = hex(code)
print repr(hex_str)

print repr(
    char.replace(hex_str, " ")
)

--output:--
'a'
97
'0x61'
'a'

可以看到“a”是一个包含一个字符的字符串,而'0x61'是一个包含4个字符的字符串:'0''x''6''1',并且在一个字符串中永远找不到四个字符的字符串。

4)删除换行符可能会损坏数据。

对于某些文件,不希望替换换行符。例如,如果您正在读取一个.jpg文件,该文件包含一堆表示图像中颜色的整数,而图像中的某些颜色恰好由数字13后跟数字10表示,那么您的代码将从输出中消除这些颜色。

但是,如果您编写的程序是只读的文本文件,则可以替换换行符。但是,不同的操作系统使用不同的线。您正在尝试替换Windows换行符(\r\n),这意味着您的程序无法处理由Mac或Linux计算机创建的文件,这些计算机使用换行符。有很多简单的方法可以解决这个问题,但也许你现在还不想为此担心。

我希望这一切不要太混乱。

首先print不是Python 2中的函数,而是一个语句。

要禁止自动换行,请添加一个尾随的,(逗号)。现在将使用空格代替换行符。

演示:

print 1,
print 2

输出:

1 2

或者使用Python 3的^{} function

from __future__ import print_function
print(1, end=' ') # default value of `end` is '\n'
print(2)

正如您可以清楚地看到的,print()函数的功能要强大得多,因为我们可以将任何字符串指定为end而不是固定空间。

相关问题 更多 >