Python编写多行范围循环

时间:2018-10-22 13:02:22

标签: python

我正在尝试编写一个脚本以根据以下内容增加几行的第二列 循环中的范围,即nums = range(17501, 17570)。因此,每次增加时,第二列中的所有值都会increment to 17202 and then 17203等等,其余的保持不变,有什么建议吗?

数据已经存在于文件中,所以我需要某种形式的read然后是write输出,这甚至可能吗?

x1E 17201   18  0   1   0   0   1
x2E 17201   19  0   1   0   0   1
x3E 17201   20  0   1   0   0   1
x4E 17201   21  0   1   0   0   1
x5E 17201   22  0   1   0   0   1
x6X 17201   23  0   1   0   0   1
x7X 17201   24  0   1   0   0   1
x8X 17201   25  0   1   0   0   1
x9X 17201   26  0   1   0   0   1
10X 17201   27  0   1   0   0   1
11X 17201   28  0   1   0   0   1
12X 17201   29  0   1   0   0   1
13X 17201   30  0   1   0   0   1
14X 17201   31  0   1   0   0   1
15X 17201   32  0   1   0   0   1
16X 17201   33  0   1   0   0   1
20X 17201   34  0   1   0   0   1
17X 17201   35  0   1   0   0   1
18X 17201   36  0   1   0   0   1
19X 17201   37  0   1   0   0   1

多亏了ROCKLY LI,我才开始努力。唯一的问题是它可能需要按数字第3列进行上述排序,如何对文件中的书面输出进行排序?

nums = range(17201,17920)

with open('Orig.txt', 'r') as fin:
     with open('PLF.txt', 'w') as fout:
         for line in fin.readlines():
             line = line.split()

             #if 17200 < int(line[1]) < 17920:

             #print(line)
             for i in range(0, len(nums),):
                 line[1] = int(line[1]) + 1
                  #line.append(str(line[1] + 1))
                 line = [str(e) for e in line] # Fix type
                 print(line)
                 #fout.write(' '.join(line) + '\n')
                 fout.write(' '.join(line) + '\n')

1 个答案:

答案 0 :(得分:0)

我认为与其在原地编辑文件,不如生成一个新文件并保留旧文件,这是更合理的选择,pandas

非常容易
import pandas as pd

df = pd.read_table('your_file.txt', header=None, delim_whitespace=True)
df[1] = df.apply(lambda x: x[1] + 1 if 17501 <= x[1] < 17570 else x[1])
df.to_csv('new_file.txt', sep=' ')

就是这样。

没有熊猫,您可以这样做:

with open('your_file.txt', 'r') as fin:
     with open('new_file.txt', 'w') as fout:
          for line in fin.readlines():
              line = line.split()
              if 17000 < int(line[1]) < 18000:
                  line[1] = int(line[1]) + 1
              line = [str(e) for e in line] # Fix type
              fout.write(' '.join(line) + '\n')