排序文件行 python

sorting lines of file python

我想按数字对文件进行冒泡排序,我的代码中可能有 2 个错误。

文件的行包含:string-space-number

响应排序错误,或者有时我还会遇到 IndexError 因为 x.append(row[l]) 超出范围

希望有人能帮助我

代码:

#!/usr/bin/python
filename = "Numberfile.txt"
fo = open(filename, "r")

x, y, z, b = [], [], [], []

for line in fo:             # read
   row = line.split(" ")    # split items by space
   x.append(row[1])         # number


liste = fo.readlines()
lines = len(liste)
fo.close()

for passesLeft in range(lines-1, 0, -1):
    for i in range(passesLeft):
        if x[i] > x[i+1]:
                temp = liste[i]
                liste[i] = liste[i+1]
                liste[i+1] = temp

fo = open(filename, "w")
for i in liste:
    fo.writelines("%s" % i)
fo.close()

文件中似乎有空行。

变化:

for line in fo:             # read
   row = line.split(" ")    # split items by space
   x.append(row[1])         # number

与:

for line in fo:             # read
   if line.strip():
       row = line.split(" ")    # split items by space
       x.append(row[1])         # number

顺便说一句,你最好使用 re.split 和正则表达式 \s+:

re.split(r'\s+', line)

这将使您的代码更具弹性 - 它也将能够处理多个空格。

对于第二个问题 Anand 继续我:你正在比较字符串,如果你想比较数字你必须通过调用 int()

来包装它

第一个问题,如果你是根据数字排序,并且数字可以是多位数字,那么你的逻辑将不起作用,因为 x 是一个字符串列表,而不是整数,并且在比较字符串时,它是按字典顺序比较的,即 '12' 小于 2 等。在附加到 x 列表之前,您应该将数字转换为 int。

此外,如果您收到 ListIndex 错误,您可能有空行或没有 2 个元素的行,您应该正确检查您的输入,您也可以添加一个条件来忽略空行。

代码-

for line in fo:
   if line.strip():
       row = line.split(" ")
       x.append(int(row[1]))