更改文本文件中数字的位置-Python中的第一到第二到第一?

更改文本文件中数字的位置-Python中的第一到第二到第一?,python,data-processing,Python,Data Processing,嗨,我有个问题,我想换号码和位置。第一个数字是第二个数字,第二个是第一个,第三个是第四个,第四个是第三个,等等。 这是我输入的一小部分 1 20 135 154 269 288 403 422 537 556 671 690 805 824 939 958 1073 1092 1207 1226 1341 1360 1475 1494 1609 1628 1743 1762 1877 1896 2011 2030 2145 2164 2279 2298 24

嗨,我有个问题,我想换号码和位置。第一个数字是第二个数字,第二个是第一个,第三个是第四个,第四个是第三个,等等。 这是我输入的一小部分

   1   20  135  154  269  288  403  422  537  556  671  690  805  824  939
 958 1073 1092 1207 1226 1341 1360 1475 1494 1609 1628 1743 1762 1877 1896
2011 2030 2145 2164 2279 2298 2413 2432 2547 2566 2681 2700 2815 2834 2949
2968 3083 3102 3217 3236 3351 3370 3485 3504 3619 3638 3753 3772 3887 3906
4021 4040 4155 4174 4289 4308 4423 4442 4557 4576 4691 4710 4825 4844 4959
因此,预期的产出将是

  20    1  154  135  288  269 etc
但问题是,当我尝试将我的号码放入列表中时,我有一些类似于双空格或\n等的内容 我写这个

my_file = open("PN_input.txt", "r")
content = my_file.read()
content_list = content.split(" ")
my_file.close()
print(content_list)
我得到了类似的结果,所以我不能进入下一步,通过使用例如for loop来改变位置

['', '', '', '1', '', '', '20', '', '135', '', '154', '', '269', '', '288', '', '403', '', '422', '', '537', '', '556', '', '671', '', '690', '', '805', '', '824', '', '939\n', '958',

以下是一些让您开始学习的内容:


s=”“”\
1   20  135  154  269  288  403  422  537  556  671  690  805  824  939
958 1073 1092 1207 1226 1341 1360 1475 1494 1609 1628 1743 1762 1877 1896
2011 2030 2145 2164 2279 2298 2413 2432 2547 2566 2681 2700 2815 2834 2949
2968 3083 3102 3217 3236 3351 3370 3485 3504 3619 3638 3753 3772 3887 3906
4021 4040 4155 4174 4289 4308 4423 4442 4557 4576 4691 4710 4825 4844 4959
"""
lines=(s.splitlines()中的行的line.split()
新的_行=[[line[1],line[0],*line[2:]表示行中的行]
对于新行中的行:
打印(行)
#印刷品:
# ['20', '1', '135', '154', '269', '288', '403', '422', '537', '556', '671', '690', '805', '824', '939']
# ['1073', '958', '1092', '1207', '1226', '1341', '1360', '1475', '1494', '1609', '1628', '1743', '1762', '1877', '1896']
# ['2030', '2011', '2145', '2164', '2279', '2298', '2413', '2432', '2547', '2566', '2681', '2700', '2815', '2834', '2949']
# ['3083', '2968', '3102', '3217', '3236', '3351', '3370', '3485', '3504', '3619', '3638', '3753', '3772', '3887', '3906']
# ['4040', '4021', '4155', '4174', '4289', '4308', '4423', '4442', '4557', '4576', '4691', '4710', '4825', '4844', '4959']

一个选项是清理列表,以便只保留数字条目,并清理类似“939\n”的条目:

my_file = open("PN_input.txt", "r")
content = my_file.read()
content_list = content.split(" ")
my_file.close()

new_content_list = []
non_allowed_chars = (' ', '\n', '\t') 
for e in content_list:
    new_string = e
    for character in non_allowed_chars: # replace non-allowed chars for empty string
        new_string = new_string.replace(character, "") 
    if new_string.isalnum(): # checks if string is alphanumeric
        new_content_list.append(new_string)

print(new_content_list)
作为旁注,您应该使用with命令打开文件,以便python处理文件的打开和关闭:

with open("PN_input.txt", "r") as my_file:
    content = my_file.read()
    content_list = content.split(" ")

是我干的。这是我的剧本。如果你有一些建议如何写得更好,请评论。谢谢大家的建议

my_file = open("PN_input.txt", "r")
content = my_file.read()
content_list = content.split()
print(len(content_list))
for i in range(0,400,2):
    var1 = content_list[i]
    var2 = content_list[i+1]
    content_list[i] = var2
    content_list[i+1] = var1
    print(var1)
    print(var2)
    print(content_list[i])
    print(content_list[i+1])    
    if i == 400:
        break;
print(content_list)
my_file.close()

with open('out.txt', 'w') as f:
    for item in content_list:
        f.write("%s " % item)
    f.close

作为我和熊猫玩耍的一部分

将熊猫作为pd导入
从io导入StringIO
数据=“”\
1   20  135  154  269  288  403  422  537  556  671  690  805  824  939
958 1073 1092 1207 1226 1341 1360 1475 1494 1609 1628 1743 1762 1877 1896
2011 2030 2145 2164 2279 2298 2413 2432 2547 2566 2681 2700 2815 2834 2949
2968 3083 3102 3217 3236 3351 3370 3485 3504 3619 3638 3753 3772 3887 3906
4021 4040 4155 4174 4289 4308 4423 4442 4557 4576 4691 4710 4825 4844 4959
'''
cols='abcdefghijklmno'
out=list('badcfehgjilknmo')
宽度=[4,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
buff=StringIO()
对于拉链中的w、c(宽度、颜色):
buff.write(“%*s%”(w,c))
buff.write(“\n”)
buff.write(数据)
buff.seek(0)
df=pd.read_fwf(buff,宽度=宽度)
交换=df[输出]
buff=StringIO()
已交换.to_字符串(buff,header=False,index=False)
打印(buff.getvalue())
打印出来

   20     1   154   135   288   269   422   403   556   537   690   671   824   805   939
 1073   958  1207  1092  1341  1226  1475  1360  1609  1494  1743  1628  1877  1762  1896
 2030  2011  2164  2145  2298  2279  2432  2413  2566  2547  2700  2681  2834  2815  2949
 3083  2968  3217  3102  3351  3236  3485  3370  3619  3504  3753  3638  3887  3772  3906
 4040  4021  4174  4155  4308  4289  4442  4423  4576  4557  4710  4691  4844  4825  4959

从这里回答的问题解决了吗?