我們在讀入txt、csv等資料時,經常會需要根據列名將讀入的字串進行分割。比較簡單的資料處理就是檔案中每行每列都有資料存在,並且一行資料之間以某種符號(空格,逗號等)分割。但有些字串中會有各種比較難處理的符號。但比如有如下的乙個字串存放在csv格式的檔案中。
q9ui32,「glutaminase liver isoform,mitochondrial」,gls2,ftsi_haein,"",,,,1574687
這個檔案本身有9列,所以該字串應該被正確的分割為9個字元。看到資料首先會想到字串的split方法,將逗號作為分隔符來分割該字串,但是實際結果卻並不是我們所期望的,具體見後面**及結果(需要說明的是ftsi_haein字元後面是雙引號,雙引號後的幾個逗號之間是沒有空格的,雙引號後面的第乙個逗號是兩個字元之間的分隔符,另外三個逗號表示了對應的三列資料為空)
假如我們將該字串存放在test.csv中,並且test.csv中只存放這乙個字串。後面的**都是基於此的。
filename=
'd:/test.csv'
f=open
(filename,
'r')
lines=f.readlines(
)for line in lines:
temp1=line.strip(
) temp2=temp1.split(
',')
print
(temp2)
['q9ui32'
,'"glutaminase liver isoform'
,'mitochondrial"'
,'gls2'
,'ftsi_haein'
,'""',''
,'',''
,'1574687'
]
用這樣的方法處理的話會分割雙引號中以逗號分割的字元也分開來,這並不是我們期望的結果。
看到split分割的結果,我們可能會想到用shlex模組來解決,該模組分割可以忽略引號中的逗號。
import shlex
filename=
'd:/test.csv'
f=open
(filename,
'r')
lines=f.readlines(
)for line in lines:
temp1=line.strip(
) temp1=shlex.shlex(temp1)
temp1.whitespace=
',' temp1.whitespace_split=
true
temp2=
list
(temp1)
print
(temp2)
['q9ui32'
,'"glutaminase liver isoform,mitochondrial"'
,'gls2'
,'ftsi_haein'
,'""'
,'1574687'
]
雙引號中的字串沒有被分割,但是後面的逗號都被當做空格分割了。所以這個方法還是不可行。
import csv
filename=
'd:/test.csv'
f=open
(filename)
reader=csv.reader(f)
for row in reader:
print
(row)
['q9ui32'
,'glutaminase liver isoform,mitochondrial'
,'gls2'
,'ftsi_haein',''
,'',''
,'','1574687'
]
可以看到,對於csv中的資料,使用csv模組讀入時非常方便的。這時不論是想將資料存入excel**或是提取某個值都可以按列表的方式方便提取。 逗號分割的字串轉成表
1.建立乙個type create or replace type tools strlist 2.建立乙個function create or replace function tools str2list str in in varchar2 return tools strlist is v ...
strtok讀取以逗號分開的字串
strtok 原型 extern char strtok char s,char delim 用法 include 功能 分解字串為一組標記串。s為要分解的字串,delim為分隔符字串。說明 首次呼叫時,s必須指向要分解的字串,隨後呼叫要把s設成null。strtok在s中查詢包含在delim中的字...
mysql 查詢以逗號相隔的字串
首先我們建立一張帶有逗號分隔的字串。create table test id int 6 not null auto increment,primary key id pname varchar 20 not null,pnum varchar 50 not null 然後插入帶有逗號分隔的測試資料...