python - 对 csv 文件中的重复值列 A 进行排序

标签 python

我正在尝试对 csv 文件中的重复值列 A 进行排序,但在 python 中没有得到预期的结果。

输入文件:(.csv)

列名称:

Uniprot Acc, PDB ID, Ligand ID, Structure Title, Uniprot Recommended Name, Gene Name, Macromolecular Name

我想对 Uniport Acc 列的重复值和单个值以及 pdb id 和配体 id 进行排序。

 Input file:
 Uni port Acc  PDB ID  Ligand ID
 * P0AET8   1AHI    NAI
 * P04036   1ARZ    NAI
 * Q59771   1C1D    NAI
 * P0C0F4   1DLJ    NAI
 * Q9QYY9   1E3E    NAI
 * Q9QYY9   1E3I    NAI
 * Q14376   1EK6    NAI
 * Q16836   1F17    NAI
 * P0AET8   1FMC    NAI
 * Q46220   1GIQ    NAI
 * P97852   1GZ6    NAI
 * P07195   1I0Z    NAI
 * P00338   1I10    NAI
 * P11986   1JKI    NAI
 * P10760   1KY5    NAI
 * Q2RSB2   1L7E    NAI
 * Q27743   1LDG    NAI
 * O32080   1LSU    NAI
 * P00334   1MG5    NAI
 * P26392   1N2S    NAI
 * P9WGT1   1NFQ    NAI
 * P0ABH7   1NXG    NAI
 * P05091   1NZW    NAI
 * P05091   1NZZ    NAI
 * P27443   1O0S    NAI
 * P0A6D5   1O9B    NAI
 * P20974   1OG4    NAI
 * P11986   1P1J    NAI

 Expected Result:
 Uni port Acc  PDB ID  Ligand ID
 * P0AET8   1AHI    NAI
 * P0AET8   1FMC    NAI
 * P04036   1ARZ    NAI
 * Q59771   1C1D    NAI
 * P0C0F4   1DLJ    NAI
 * Q9QYY9   1E3E    NAI
 * Q9QYY9   1E3I    NAI
   .
   .
   .





 I want to sort how many uniport acc id same with pdb id along with single id, No need to remove any id.

代码:

import csv
import re
import sys
import os

f1 = csv.reader(open('one.csv', 'rb'))

writer = csv.writer(open("Output_file_1.csv", "wb"))
def has_duplicates(f1):    
    for i in range(0, len(f1)):
        for x in range(i + 1, len(f1)):
            if f1[i] == f1[x]:
                var = f1[i]                    
                writer.writerow(var)

最佳答案

您可以首先将所有值存储在列表中,然后您可以轻松地按排序顺序找到重复值。请参阅我的下面的代码。

  import csv
  import re
  import sys
  import os

  f1 = csv.reader(open('one.csv', 'rb'))

  writer = csv.writer(open("Output_file_1.csv", "wb"))

  def has_duplicates(f1):
      list = []
      for i in range(0, len(f1)):
          list.append(f1[i])
      for var in set([x for x in list if list.count(x) > 1]):
          writer.writerow(var)  # print only duplicate values in a sorted list

根据您的预期结果进行新编辑

如果可以使用sorted来实现这一点,但这会给出您预期的结果,但有一点区别。您可以使用以下代码来获得预期的结果。

def sort_duplicates(f1):
      for i in range(0, len(f1)):
          f1.insert(f1.index(f1[i])+1, f1[i])
          f1.pop(i+1)
for var in f1:
     writer.writerow(var)  

我已经用列表进行了测试。这是结果屏幕截图..

>>> a=['P0AET8', 'Q59771', 'P0C0F4','DFC4H', 'P0AET8','Q59771','ACG5D']
>>> print sorted(a)
['ACG5D', 'DFC4H', 'P0AET8', 'P0AET8', 'P0C0F4', 'Q59771', 'Q59771']

如果您使用上面的代码,那么这就是结果。

>>> a=['P0AET8', 'Q59771', 'P0C0F4','DFC4H', 'P0AET8','Q59771','ACG5D']
>>> for i in range(0,len(a)):
...             a.insert(a.index(a[i])+1, a[i])
...             a.pop(i+1)

>>> print a
['P0AET8', 'P0AET8', 'Q59771', 'Q59771', 'P0C0F4', 'DFC4H', 'ACG5D']

关于python - 对 csv 文件中的重复值列 A 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39284717/

相关文章:

python - Python 抽认卡程序中的单词对象

python - Django http POST 错误

python 映射与列表理解

python - 在主线程中调用 queue.join() 对非主线程有何作用?

python - 在 Python 中计算日期是开始、 future 还是现在

python - 将两个 collections.Counter() 对象的内容相加

python - 如何为 range() 使用小数步长值?

python - 查找数据最适合的 bin

python - 使用 WSGI 进行 Cherrypy 路由

检查数据类字段是否具有默认值的 Pythonic 方法