Python 为什么write()方法会写入未知字符?

Python 为什么write()方法会写入未知字符?,python,split,escaping,character,Python,Split,Escaping,Character,我有一个简单的txt文件: [header] width=8 height=5 tilewidth=175 tileheight=150 [tilesets] tileset=../GFX/ts1.png,175,150,0,0 [layer] type=Tile Layer 1 data= 1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,1,1,1, 1,0,0,0,6,0,0,1, 1,1,1,1,4,1,1,1 我想用“[header]”、“[

我有一个简单的txt文件:

[header]
width=8
height=5
tilewidth=175
tileheight=150

[tilesets]
tileset=../GFX/ts1.png,175,150,0,0

[layer]
type=Tile Layer 1
data=
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,1,
1,0,0,0,6,0,0,1,
1,1,1,1,4,1,1,1
我想用“[header]”、“[tilesets]”和“[layers]”来分隔文本。问题是,如果我这样分割它:

m = open(self.fullPath, 'r+')
sliced = m.read().split() # Default = \n
print sliced
它应该分隔每一行,因为read()总是在每一行的末尾留下“\n”:

['[header]', 'width=8', 'height=5', 'tilewidth=175', 'tileheight=150', '[tilesets]', 'tileset=../GFX/ts1.png,175,150,0,0', '[layer]', 'type=Tile', 'Layer', '1', 'data=', '1,1,1,1,1,1,1,1,', '1,0,0,0,0,0,0,1,', '1,0,0,0,0,1,1,1,', '1,0,0,0,6,0,0,1,', '1,1,1,1,4,1,1,1']
但是,如果每个部分之间有一个“#”符号或任何分隔符号,而不是一个新行字符,则可以完全拆分

然后,我想:“那里有空行,它们是新行字符,所以我只需要测试该行是否等于新行字符,并将其替换为“#”:

太好了。。除了。。而不是实现这一点:

[header]
width=8
height=5
tilewidth=175
tileheight=150
#
[tilesets]
tileset=../GFX/ts1.png,175,150,0,0
#
[layer]
type=Tile Layer 1
data=
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,1,
1,0,0,0,6,0,0,1,
1,1,1,1,4,1,1,1
我明白了:

[header]
width=8
height=5
tilewidth=175
tileheight=150

[tilesets]
tileset=../GFX/ts1.png,175,150,0,0

[layer]
type=Tile Layer 1
data=
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,1,
1,0,0,0,6,0,0,1,
1,1,1,1,4,1,1,1##õÙÓ              Z                  d                Z                 d                 d                 l                 Z                 d                 d                 l                 Z                 d          "      Z                 d          $      „                  Z                 d          -      f                  d                 „                  ƒ                   Y                  Z                 e          H      d                 ƒ                 Z                 e          I      j                 ƒ                                  Æ Çîà  õÙÓ        ;      |                  j                 d                 ƒ                 }                 i          <      g                  d                  6                  g                  d                  6                  g                  d                  6                  }                 d          =      d                 d                 g                 }                 x   0    ·ð?      |                 j                 ƒ                   D                                                                                                                   u tîà  õÙÓI   À¶ð                                                                                                                                                                                                                                                                                                                ) (–à    W                                                                                                                                                                                                                                                                                                                           # "íà  õ@ÎÔ   €·ðB      |                 j                 ƒ                   D                                                                                                                                                                                                                                           ú  ú–à  õ(Tò   `·ð       }                 |          C       G                   H                  q   |   @·ð                                                                                                                                                                                                            Ñ  Ñ–à  õ@ÎÔ                                                                                                                                                                                                                                                                                                                        ¨  ¨–à  õ@ÎÔ
       E       G                   H                  |          F      j                 ƒ                                                                                                                                                                                                                        –à  õ@ÎÔ                S                                                                                                                                                                                                                                                                                                       V  V–à  õ@ÎÔž   ÿÿÿÿ    t  |  j d ƒ } i g  d 6g  d 6g  d 6} d d d g } x0 | j ƒ  D]" } | d k rk | j d  ƒ n  qI Wx | j ƒ  D] } | GHq| Wd
 GH| j ƒ  d  S `:ð>  >§à  õ@ÎÔÀ:ðà¢îðà:ð ;ð`ßî ;ð@;ð0ð`;ð £îXð@ ï€;ð€ð ;ð`£îÀ;ðà;ð ð2  2›à  õ@ÎÔ`<ð€<ðà¤î <ð ?îÀ<ðà<ð =ð =ð@=ðÀ?î ïÐð`=ð¸ï€=ð =ðøðÀ=ðà=ð >ð >ð@>ð`>ð ð€>ð >ðÀ>ðà>ð ?ð@OÑ ?ð@?ð`?ð€?ð ?ðHðpðÀ?ð˜ðÀðà?ð @ðÀ£î@@ð`@ð€@ð @ð PðHPðÀ@ðà@ð
[标题]
宽度=8
高度=5
波浪宽度=175
瓷砖高度=150
[瓷砖组]
tileset=../GFX/ts1.png,175150,0,0
[图层]
类型=瓷砖层1
资料=
1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,1,
1,0,0,0,0,1,1,1,
1,0,0,0,6,0,0,1,
1,1,1,1,4,1,1,1,1##õÙÓZ d d d l Z d d l"Z d$Z d-f d Y Z e H d Z e I j          Æ Çîà  õÙÓ        ;      |                  jdƒ}i

这毫无意义:)。

同时读取和写入文件往往会对您获得的输出类型产生不可预测的影响

如果您的类别总是由两个换行符分隔,那么只需在此基础上进行拆分,而不必执行任何奇特的查找/替换操作

m = open("input.txt", "r+")
sliced = m.read().split("\n\n")
print "data has been split into {} categories.".format(len(sliced))
#print the starting line of each category
for category in sliced:
    print category.split("\n")[0]
结果:

data has been split into 3 categories.
[header]
[tilesets]
[layer]

在代码中,您写入了
#Default=\n
,但这不是真的。拆分
的默认分隔符是任何空格。您可以看到您的行“type=Tile Layer 1”被拆分为
'type=Tile',Layer','1'
哈哈..效果很好..我完全忘记了双“\n”。
data has been split into 3 categories.
[header]
[tilesets]
[layer]