2017-07-17 61 views
0

我有一個csv文件就像原始報告,所以我想從每行中包含特定字符串的幾行。 父文件:如何使用python腳本從父csv文件生成子csv文件?

cols: A B C D E F G H I J K L M N O 
----------------------------------------------------------------------- 
     abc def ghi jkl mno pqr stu vwx yz aaa bbb X 0 0 ajsjsvdjchbiyu ======kjdkjfk 
     abe drf gti jul muo pir stu vwx yz aaa bbb X 0 0 ajsjsvdjchbiyu ======kjdkjfk 
     abe drf gti j8l 7uo pir stu vwx yz aaa bbb Y 0 0 ajsjsvdjchbiyu ======kjdkjfk 
     abe drf gti j8l 7uo pir stu vwx yz aga btb Y 0 0 ajsjsvdjchbiyu ======kjdkjfk

子文件應該是:(我只需要以下行其中包含的Y列L)

cols: A B C D E F G H I J K L M N O 
     abe drf gti j8l 7uo pir stu vwx yz aaa bbb Y 0 0 ajsjsvdjchbiyu ======kjdkjfk 
     abe drf gti j8l 7uo pir stu vwx yz aga btb Y 0 0 ajsjsvdjchbiyu ======kjdkjfk

我寫了下面的腳本來做到這一點:

import sys 

fs=open("compliance_report.csv",'r') 
fe=open("failed_controls_report.csv",'w') 

count=0 
lDict={} 

fe.write("\n") 
print "\nCleaning un-wanted lines from raw report...." 

for l in fs: 
    if'Y' in l: 

     fe.write(l) 

    else: 
     continue 

count=count+1 

fs.close() 
fe.close() 

我們在「0」列中有文本,所以當我使用這個腳本時,我得到了同一行的結果。 但這是沒有「0」列工作

+0

你應該看看**熊貓**。 –

+0

使用內置的['csv'](https://docs.python.org/3/library/csv.html)模塊來處理CSV數據。無論在哪個列中,您的代碼都會寫入包含「Y」的任何行。 – zwer

+0

[AWK](https://en.wikipedia.org/wiki/AWK)適用於簡單查詢:'awk'$ 12 ==「Y」'inputfiles'($ 12是第12列) – denis

回答

0

您需要使用csv模塊實際解析到字段的行。隨着代碼,你現在只是在整個行尋找任何Y字符顯然不是你想要的。你可以知道你的代碼不可能是正確的,因爲它根本沒有提到「列L」,儘管該列是問題陳述的一部分。

+0

我可以擁有確切輸出的語法? (我得到錯誤(拿出文件單行)與最後一列是列「0」,因爲此列包含文本(帶符號,特殊字符,空格等)。) –

+0

在上面的腳本中,我怎樣才能指定特定的列而不是整行? –

0

另一種方法是使用Pandas庫。程序與熊貓看起來是這樣的:

import pandas as pd 

# Read csv 
df = pd.read_csv("pathtocsv") 

# Filter column N 
df= df[df["N"] > "Y"] 

# Write to csv again 
df.to_csv("newcsvpath")