python拆分和反向文本文件

时间:2015-05-08 23:32:44

标签: python reverse flip

我有一个文本文件存储像file = open("Class 3.txt", "r") t4 = (file.read()) test =''.join(t4.split(':')[0:10]) print (test) 这样的数据,例如:

  鲍勃:10   弗雷德:3
  乔治:5

但是,我想这样说它

  10:鲍勃
  3:弗雷德
  5:乔治

这样的代码是什么样的? 我是否需要首先删除冒号,因为我通过此代码管理了这个?

$.post("script.php", $("#form").serialize + '&arr=' + encodeURIComponent(JSON.stringify(arr)), function(response) {
    ...
});

我如何完成它并让它反过来?

3 个答案:

答案 0 :(得分:1)

此代码处理小数分数(例如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

答案 1 :(得分:0)

首先,整个文件一次比一次一行更难。

但是,不管怎样,你显然不能只是split(':'),而是''.join(…)。所有这一切都是用冒险替换冒号。你显然需要':'.join(…)将冒号放回去。

同时,你必须在每个冒号的每一侧交换值。

所以,这里的函数只需一行,并交换边:

def swap_sides(line):
    left, right = line.split(':')
    return ':'.join((right, left))

但是你会注意到这里有一些问题。 left在冒号之前有一个空格; right在冒号后面有一个空格,在结尾处有一个换行符。你打算如何处理?

最简单的方法是只需strip两侧的所有空格,然后添加回你想要的空白区域:

def swap_sides(line):
    left, right = line.split(':')
    return ':'.join((right.strip() + ' ', ' ' + left.strip())) + '\n'

但更聪明的想法是将结肠周围的空间视为分隔符的一部分。 (换行符,您仍然需要手动处理。)

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)

答案 2 :(得分:0)

让我们学习如何反转一行:

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(' : ')))