我有这个简单的 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']
但是,如果用“#”符号或任何分隔每个部分的符号代替换行符,则可以完美分割。
然后,我想:“那里有空行,它们是换行符,所以我只需要测试该行是否等于换行符并将其替换为‘#’”:
for line in m.readlines():
if line == '\n':
m.write('#')
for line in m.readlines():
print line
完美..除了...而不是实现这个:
[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ðÀ@ðà@ð
这毫无意义:)。
最佳答案
同时读取和写入文件往往会对您获得的输出类型产生不可预测的影响。
如果您的类别始终由两个换行符分隔,那么只需对其进行拆分,而不是执行任何花哨的查找/替换操作。
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]
关于python - 为什么 write() 方法会写入未知字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22404871/