排序文件行 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]))
我想按数字对文件进行冒泡排序,我的代码中可能有 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]))