python 拆分和反转文本文件
python split and reverse text file
我有一个存储数据的文本文件 name : score
例如:
bob : 10
fred : 3
george : 5
不过,我想做成上面写的
10 : bob
3 : fred
5 : george
像这样翻转它的代码是什么?
我是否需要先通过删除冒号来分隔它们,因为我已经通过这段代码做到了这一点?
file = open("Class 3.txt", "r")
t4 = (file.read())
test =''.join(t4.split(':')[0:10])
print (test)
我如何完成它并让它说反话?
此代码处理分数(例如 9.5
),并且不关心 :
分隔符周围是否有额外的空格。它应该比您当前的代码更容易维护。
Class 3.txt:
bob : 10
fred : 3
george : 5
代码:
class_num = input('Which class (1, 2, or 3)? ')
score_sort = input('Sort by name or score? ').lower().startswith('s')
with open("Class " + class_num + ".txt", "r") as f:
scores = {name.strip():float(score) for
name,score in (line.strip().split(':') for line in f)}
if score_sort:
for name in sorted(scores, key=scores.get, reverse=True):
print(scores.get(name), ':', name)
else:
for name in sorted(scores):
print(name, ':', scores.get(name))
输入:
3
scores
输出:
10.0 : bob
5.0 : george
3.0 : fred
输入:
3
name
输出:
bob : 10.0
fred : 3.0
george : 5.0
首先,一次处理整个文件比一次处理一行要难得多。
但是,无论哪种方式,您显然都不能只 split(':')
然后 ''.join(…)
。要做的就是用空的替换冒号。你显然需要 ':'.join(…)
把冒号放回去。
同时,您必须交换每个冒号两边的值。
所以,这是一个只需要一行并交换两边的函数:
def swap_sides(line):
left, right = line.split(':')
return ':'.join((right, left))
但是您会注意到这里存在一些问题。 left
在冒号前有一个 space; right
在冒号后有一个 space,在末尾有一个换行符。你打算怎么处理?
最简单的方法就是strip
去掉两边所有的白色space,然后把你想要的白色space加回去:
def swap_sides(line):
left, right = line.split(':')
return ':'.join((right.strip() + ' ', ' ' + left.strip())) + '\n'
但更聪明的想法是将冒号周围的 space 视为分隔符的一部分。 (换行,还是需要手动处理)
def swap_sides(line):
left, right = line.strip().split(' : ')
return ' : '.join((right.strip(), left.strip())) + '\n'
但是你仔细想想,你真的需要重新添加换行符吗?如果你只是打算将它传递给 print
,答案显然是否定的。所以:
def swap_sides(line):
left, right = line.strip().split(' : ')
return ' : '.join((right.strip(), left.strip()))
无论如何,一旦您对这个函数感到满意,您只需编写一个循环,为每一行调用一次。例如:
with open("Class 3.txt", "r") as file:
for line in file:
swapped_line = swap_sides(line)
print(swapped_line)
让我们学习如何反转单行:
line = `bob : 10`
line.partition(' : ') # ('10', ' : ', 'bob')
''.join(reversed(line.partition(' : ')) # 'bob : 10'
现在,结合从文件中读取行:
for line in open('Class 3.txt').read().splitlines():
print ''.join(reversed(line.partition(' : '))
更新
我正在重写代码以逐行读取文件:
with open('Class 3.txt') as input_file:
for line in input_file:
line = line.strip()
print ''.join(reversed(line.partition(' : ')))
我有一个存储数据的文本文件 name : score
例如:
bob : 10
fred : 3
george : 5
不过,我想做成上面写的
10 : bob
3 : fred
5 : george
像这样翻转它的代码是什么? 我是否需要先通过删除冒号来分隔它们,因为我已经通过这段代码做到了这一点?
file = open("Class 3.txt", "r")
t4 = (file.read())
test =''.join(t4.split(':')[0:10])
print (test)
我如何完成它并让它说反话?
此代码处理分数(例如 9.5
),并且不关心 :
分隔符周围是否有额外的空格。它应该比您当前的代码更容易维护。
Class 3.txt:
bob : 10
fred : 3
george : 5
代码:
class_num = input('Which class (1, 2, or 3)? ')
score_sort = input('Sort by name or score? ').lower().startswith('s')
with open("Class " + class_num + ".txt", "r") as f:
scores = {name.strip():float(score) for
name,score in (line.strip().split(':') for line in f)}
if score_sort:
for name in sorted(scores, key=scores.get, reverse=True):
print(scores.get(name), ':', name)
else:
for name in sorted(scores):
print(name, ':', scores.get(name))
输入:
3
scores
输出:
10.0 : bob
5.0 : george
3.0 : fred
输入:
3
name
输出:
bob : 10.0
fred : 3.0
george : 5.0
首先,一次处理整个文件比一次处理一行要难得多。
但是,无论哪种方式,您显然都不能只 split(':')
然后 ''.join(…)
。要做的就是用空的替换冒号。你显然需要 ':'.join(…)
把冒号放回去。
同时,您必须交换每个冒号两边的值。
所以,这是一个只需要一行并交换两边的函数:
def swap_sides(line):
left, right = line.split(':')
return ':'.join((right, left))
但是您会注意到这里存在一些问题。 left
在冒号前有一个 space; right
在冒号后有一个 space,在末尾有一个换行符。你打算怎么处理?
最简单的方法就是strip
去掉两边所有的白色space,然后把你想要的白色space加回去:
def swap_sides(line):
left, right = line.split(':')
return ':'.join((right.strip() + ' ', ' ' + left.strip())) + '\n'
但更聪明的想法是将冒号周围的 space 视为分隔符的一部分。 (换行,还是需要手动处理)
def swap_sides(line):
left, right = line.strip().split(' : ')
return ' : '.join((right.strip(), left.strip())) + '\n'
但是你仔细想想,你真的需要重新添加换行符吗?如果你只是打算将它传递给 print
,答案显然是否定的。所以:
def swap_sides(line):
left, right = line.strip().split(' : ')
return ' : '.join((right.strip(), left.strip()))
无论如何,一旦您对这个函数感到满意,您只需编写一个循环,为每一行调用一次。例如:
with open("Class 3.txt", "r") as file:
for line in file:
swapped_line = swap_sides(line)
print(swapped_line)
让我们学习如何反转单行:
line = `bob : 10`
line.partition(' : ') # ('10', ' : ', 'bob')
''.join(reversed(line.partition(' : ')) # 'bob : 10'
现在,结合从文件中读取行:
for line in open('Class 3.txt').read().splitlines():
print ''.join(reversed(line.partition(' : '))
更新
我正在重写代码以逐行读取文件:
with open('Class 3.txt') as input_file:
for line in input_file:
line = line.strip()
print ''.join(reversed(line.partition(' : ')))