удаление некоторых строк из текстового файла в pandas и создание нового файла - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть текстовый файл, который имеет сложную структуру, и я хотел бы сделать файл с разделителями табуляции с 10 столбцами.проблема в начале этого файла, есть некоторые бесполезные строки, которые должны быть удалены.в этом файле есть строка, которая начинается с #CHROM, которая будет первой строкой текстового файла результата.

вот пример моего входного файла:

##bcftools_filterCommand=filter -e 'SOMATIC_PON_COUNT!="." && MIN(SOMATIC_PON_COUNT) > 3' -s SOMATIC_PON -m+ -O z -o /sample/output/180614_HMFregCPCT_FR16985640_FR16985806_CPCT02170033/somaticVariants/CPC
T02170033R_CPCT02170033T/CPCT0217003ted.pon
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  CPCT02170033T
1   819393  .   T   C   .   PASS    AC=0;AF=0;AN=0;MAPPABILITY  GT:AD:DP    0/1:75,15:91

ожидаемый вывод(с 2 строками):

CHROM   POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  CPCT02170033T
1   819393  .   T   C   .   PASS    AC=0;AF=0;AN=0;MAPPABILITY  GT:AD:DP    0/1:75,15:91

для этого я написал следующий код на python3:

with open("myfile.txt") as f:
    total = f.readlines()
    skip_value = total.index("#CHROM\n")
    df = pd.read_csv("myfile.txt", skiprows=skip_value, sep="\t")

, но выдает эту ошибку:

ValueError: '#CHROM\n' is not in list

Вы знаете, как исправить код?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы были почти там, так как total - это список, вам нужно перебрать все элементы, чтобы найти индекс элемента, который соответствует вашей подстроке.

with open('myfile.txt') as f: total = f.readlines() for elem in total: if elem.find('#CHROM') > -1: skip_value = total.index(elem) df = pd.read_csv('myfile.txt, skiprows=skip_value, sep = '\t')

0 голосов
/ 23 сентября 2019
# Import libries
import pandas as pd 

# open the file 
with open("myfile.txt") as f:
    skip_value = 1
    for line in f.readlines():
        if line.split()[0] == "#CHROM":
            skip_value += 1

# Load data from txt with pandas
df = pd.read_csv("myfile.txt", skiprows=skip_value, sep="\t")

# Print the final df
print(df)

Выход

    #CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  CPCT02170033T
0   1   819393  .   T   C   .   PASS    AC=0;AF=0;AN=0;MAPPABILITY  GT:AD:DP    0/1:75,15:91
...