【问题标题】:Python replicate each line and then make change in each linePython复制每一行,然后在每一行中进行更改
【发布时间】:2017-08-07 22:15:22
【问题描述】:

我有一个 csv 文件,其中包含如下行:

0.10089,0,0,1,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0 0.10955,0,0,2,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0

我想将每一行复制3次,然后将每行中的第4个元素更改为(1,2,...),以便所有行(包括复制的行)都成为此订单的一部分

0.10089,0,0,1,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0 0.10089,0,0,2,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0 0.10089,0,0,3,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0 0.10955,0,0,4,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0 0.10955,0,0,5,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0 0.10955,0,0,6,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0

我知道每个逗号的索引,因此知道第 4 个元素的位置

with fileinput.input(inplace=True) as f: for line in f: line = line.rstrip('\n') comma_pos_array = [i for i,x in enumerate(line) if x == ','] for i in range(3): print(line)

我尝试过一些方法,比如从0 to (number of lines in f)*3 创建一个连续整数数组,然后用这个新数组中的相应元素更改第 4 个元素,但它们似乎不起作用。

任何帮助将不胜感激!

【问题讨论】:

    标签: python-3.5


    【解决方案1】:

    这将产生你想要的(没有 csv 模块):

    n = 1 # counter
    
    for line in f:
        numbers = line.split(sep=',') # getting list of separated numbers
        for i in range(3):
            numbers[3] = n # replacing with proper value
            n += 1
            s = ''
            for i in numbers: # adding commas
                s += str(i) + ','
            s.rstrip(',') # removing last comma
            print(s)
    

    【讨论】:

      【解决方案2】:

      这是使用csv module 读写输入/输出的变体:

      from io import StringIO
      from csv import reader, writer
      
      txt = '''0.10089,0,0,1,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0
      0.10955,0,0,2,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0'''
      
      REPEAT = 3
      
      with StringIO(txt) as infile, StringIO() as outfile:
      
          rows = reader(infile)
          out_csv = writer(outfile)
      
          counter = 0
      
          for row in rows:
              for i in range(REPEAT):
                  counter += 1
                  row[3] = counter
                  out_csv.writerow(row)
      
          print(outfile.getvalue())
      

      并产生输出:

      0.10089,0,0,1,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0
      0.10089,0,0,2,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0
      0.10089,0,0,3,0,0,0,0,0,0,-1.8,-0.7,1999998.0,0,0,0,80,81.226,158.25,0
      0.10955,0,0,4,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0
      0.10955,0,0,5,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0
      0.10955,0,0,6,0,0,0,0,0,0,-1.5,0.4,-4.1,0,0,0,88.127,87.784,158.47,0
      

      (您需要将StringIO 部分替换为您的文件;我在这里使用它们来使示例独立)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-18
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多