簡體   English   中英

如何使用Pandas讀取CSV並且只在沒有Sep或Delimiter的情況下將其讀入1列

[英]How to read a CSV with Pandas and only read it into 1 column without a Sep or Delimiter

我有一個由許多電子郵件密碼組合組成的txt文件,問題是它在開頭中間或結尾處充滿了符號。 這些都可以使用正則表達式替換,但我的問題是讀取txt文件並將所有數據保存在1列中。 不能使用分隔符或Sep,因為每行包含許多不同的符號。 即使是默認的','也不可行,因為起始行以','開頭,所以它不會保留任何數據。

我已經有一個腳本只能找到電子郵件並使用pandas和regex刪除噪音,但最初的讀取是我的問題。 我聽說過在c引擎上使用python引擎但這樣做會導致一些列顯示NaN並將其余的電子郵件組合分別放在第2列中。

with open(self.breach_file, 'r', encoding='utf-8') as breach_file:
            found_reader = pd.read_csv(breach_file, names=['Email'], dtype={'Email':str}, quoting=csv.QUOTE_NONE, engine='c')
            found_reader = pd.DataFrame(found_reader)
            found_reader['Email'] = found_reader['Email'].replace(symbol_dictionary_colon, ':', regex=True).replace(symbol_dictionary_no_space, '', regex=True)
            found_reader = found_reader.str.replace('?', '', regex=True).str.strip()
            loaded_list = found_reader.str.replace(symbol_dictionary_first_char, '', regex=True)
        breach_file.close()

我只是希望數據在1列中讀取,無論該行以什么符號開頭。 有幫助嗎?

PS我嘗試使用2列,然后如果第1列是NaN則創建一個新的列,其中col 1和2連接,但這不提供可行的解決方案。

所以你的文件只包含一列的信息,還是只有其他信息作為密碼? 你的檔案有多大?

如果它不大,你可以這樣做:

with open(self.breach_file, 'r', encoding='utf-8') as breach_file:
    passwords= breach_file.readlines()

pd.DataFrame({'passwords': passwords})

如果它更大,您可以逐行讀取並將每個行一次添加到您的數據幀(但這可能很慢)。 您還可以嘗試使用read_fwf函數,該函數需要固定寬度的文件,因此不會查找字段分隔符。 顯然,它不要求文件包含相同長度的行。 它看起來像:

pd.read_fwf('fake_fixed.txt', widths= [100])

您只需要確保使用最長密碼的最小寬度。

另一種可能性是使用

pd.read_csv('fake_fixed.txt', sep='\n')

因此,請確保線條不會被拆分(假設您的線條被換行分隔。這樣您甚至可以使用自定義轉換器來解析電子郵件地址(如果您確實只需要一列的信息),那么可能會節省一些空間。

回答:

found_reader = pd.read_csv(breach_file, names=['Email'], dtype={'Email':str}, delimiter='\n', quoting=csv.QUOTE_NONE, engine='c')

Delimiter或Sep都可以工作。

信用: https//stackoverflow.com/users/6925185/jottbe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM