loadText

Parent Previous Next


语法


loadText(filename, [delimiter], [schema], [skipRows=0])


参数


filename是字符串,表示数据文件的路径。


delimiter是数据文件中各列的分隔符。默认是逗号。


schema是一个表,用于指定各字段的数据类型。它可以包含以下四列(其中,name和type这两列是必需的):


列名

含义

name

字符串,表示列名

type

字符串,表示数各列的数据类型

format

字符串,表示数据文件中日期或时间列的格式

col

整型,表示要加载的列的下标。该列的值必须是升序。


skipRows是0到1024之间的整数,表示从文件头开始忽略的行数。它是一个可选参数。默认值为0。


详情


将数据文件加载到DolphinDB的内存表中。loadText使用单个线程加载数据,如果需要使用多个线程并行加载数据,请使用ploadText函数。


如果文件中第一行的内容不包含以数字开头的数据,那么加载文件时系统会将第一行会作为列名。如果文件中第一行的内容包含数字,那么加载文件时系统会使用col0, col1, ...等作为列名。


当DolphinDB加载数据文件时,会进行随机抽样,并基于样本决定每列的数据类型。这个方法不一定每次都能准确决定各列的数据类型。因此我们建议,在加载数据前,使用extractTextSchema函数查看DolphinDB识别每列的数据类型。如果DolphinDB识别的数据类型不符合预期,可以在schema的type列中指定数据类型。对于日期列或时间列,如果DolphinDB识别的数据类型不符合预期,不仅需要在schema的type列指定时间类型,还需要在format列中指定数据文件中日期或时间的格式(用字符串表示),如"MM/dd/yyyy"。如何表示日期和时间格式请参考日期和时间的调整及格式


如果只需加载数据文件中的部分列,需要在schema的col列中指定要加载的列的下标。


由于DolphinDB的字符串采用UTF-8编码,加载的文件必须是UTF-8编码。


例子


首先,使用以下脚本生成模拟的数据文件:



>n=10

sym=rand(`AAPL`ORCL`MS`SUN,n)

permno=take(10001,n)

date=rand(2019.06.01..2019.06.10,n)

open=rand(100.0,n)

high=rand(200.0,n)

close=rand(200.0,n)

pre_close=rand(200.0,n)

change=rand(100.0,n)

vol=rand(10000,n)

amount=rand(100000.0,n)

t=table(sym,permno,date,open,high,close,pre_close,change,vol,amount)

saveText(t,"C:/DolphinDB/Data/stock.csv")



例1. 直接加载数据文件



tt=loadText("C:/DolphinDB/Data/stock.csv");


>tt;

sym  permno date       open      high       close      pre_close  change    vol  amount      

---- ------ ---------- --------- ---------- ---------- ---------- --------- ---- ------------

MS   10001  2019.06.06 90.346594 80.530542  96.474428  146.305659 0.720236  1045 90494.568297

AAPL 10001  2019.06.07 91.165315 8.482074   85.514922  16.259077  76.797829 7646 91623.485996

AAPL 10001  2019.06.03 45.361885 14.077451  149.848419 89.110375  45.499145 9555 98171.601654

MS   10001  2019.06.04 8.98688   0.591778   155.54643  132.423187 69.95799  1202 3512.927634

MS   10001  2019.06.07 62.866173 33.465237  174.20712  102.695818 74.580523 3524 61943.64517

MS   10001  2019.06.09 32.819915 13.319577  136.729618 63.980405  60.66375  7078 85138.216568

MS   10001  2019.06.07 90.210866 22.728777  150.212291 59.454705  73.916303 5306 19883.845607

AAPL 10001  2019.06.06 83.752686 71.3501    98.211979  145.60098  94.428343 8852 9236.020781

ORCL 10001  2019.06.01 81.64719  129.702202 182.784373 117.575967 74.84595  2942 43394.871242

AAPL 10001  2019.06.02 10.068382 80.875383  181.674585 138.783821 25.298267 1088 82981.043775


>schema(tt).colDefs;

name      typeString typeInt comment

--------- ---------- ------- -------

sym       SYMBOL     17            

permno    INT        4              

date      DATE       6              

open      DOUBLE     16            

high      DOUBLE     16            

close     DOUBLE     16            

pre_close DOUBLE     16            

change    DOUBLE     16            

vol       INT        4              

amount    DOUBLE     16  



例2. 指定某列的数据类型来加载数据文件


例如,我们想要把permno列的数据类型转换成SYMBOL,可以用extractTextSchema函数获取输入文件的结构,在导入数据前修改该列的数据类型,并指定loadText函数的schema参数。



>schema=extractTextSchema("C:/DolphinDB/Data/stock.csv");

update schema set type=`SYMBOL where name=`permno;                

tt=loadText("C:/DolphinDB/Data/stock.csv",,schema);

schema(tt).colDefs;


name      typeString typeInt comment

--------- ---------- ------- -------

sym       SYMBOL     17            

permno    SYMBOL     17            

date      DATE       6              

open      DOUBLE     16            

high      DOUBLE     16            

close     DOUBLE     16            

pre_close DOUBLE     16            

change    DOUBLE     16            

vol       INT        4              

amount    DOUBLE     16



用户也可以指定所有数据类型:



>schematable=table(`sym`permno`date`open`high`close`pre_close`change`vol`amount as name,`SYMBOL`SYMBOL`DATE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`DOUBLE`INT`DOUBLE as type)

tt=loadText("C:/DolphinDB/Data/stock.csv",,schema)

schema(tt).colDefs;


name      typeString typeInt comment

--------- ---------- ------- -------

sym       SYMBOL     17            

permno    SYMBOL     17            

date      DATE       6              

open      DOUBLE     16            

high      DOUBLE     16            

close     DOUBLE     16            

pre_close DOUBLE     16            

change    DOUBLE     16            

vol       INT        4              

amount    DOUBLE     16    



例3. 只加载部分列


例如,我们只需加载sym, date, open, high, close, vol, amount这7列。注意,加载数据时,不能改变各列的先后顺序。如果需要调整列的顺序,可以将数据文件加载后,再使用reorderColumns!函数。



>schema=extractTextSchema("C:/DolphinDB/Data/stock.csv");

schema=select * from schema where name in `sym`date`open`high`close`vol`amount

schema[`col]=[0,2,3,4,5,8,9]

         

tt=loadText("C:/DolphinDB/Data/stock.csv",,schema);

tt;


sym  date       open      high       close      vol  amount      

---- ---------- --------- ---------- ---------- ---- ------------

SUN  2019.06.10 18.675316 72.754005  136.463909 1376 31371.319038

AAPL 2019.06.05 42.098717 196.873587 41.513899  3632 9950.864129

ORCL 2019.06.05 62.223474 197.099027 123.785675 3069 38035.800937

SUN  2019.06.03 0.18163   50.669866  4.652098   6213 1842.198893

SUN  2019.06.06 32.54134  67.012502  130.312294 4891 55744.156823

SUN  2019.06.07 56.899091 81.709825  61.786176  1133 69057.849515

AAPL 2019.06.08 77.026838 38.504431  22.68496   3672 34420.187073

ORCL 2019.06.07 62.752656 39.33621   48.483091  4382 41601.601639

AAPL 2019.06.02 8.5487    17.623418  141.88325  8092 15449.159988

AAPL 2019.06.02 26.178685 197.320455 110.52407  5541 14616.820449



例4. 加载文件时,忽略数据文件的前2行。


示例文件的第一行为列名,因此忽略前2行后,总的数据条数为9。



>re=loadText(filename="C:/DolphinDB/Data/stock.csv",skipRows=2);

>select count(*) from re;


count

-----

9    



例5. 指定时间类型的格式来加载数据文件


生成本例所需的数据文件:



>time=["20190623145457","20190623155423","20190623163025"]

sym=`AAPL`MS`IBM

qty=2200 5400 8670

price=54.78 59.64 65.23

t=table(time,sym,qty,price)

saveText(t,"C:/DolphinDB/Data/t2.csv");



加载数据前,使用extractTextSchema函数获取该数据文件的结构:



>extractTextSchema("C:/DolphinDB/Data/t2.csv");


name  type  

----- ------

time  LONG  

sym   SYMBOL

qty   INT  

price DOUBLE



由于time列的时间格式与DolphinDB中的时间格式不同,如果直接加载该文件,time列的数据将会被识别为长整型。为了能够正确加载该文件time列的数据,需要指定time列的数据类型为DATETIME,并且指定该列的格式为"yyyyMMddHHmmss"。



>schema=extractTextSchema("C:/DolphinDB/Data/t2.csv")

update schema set type = "DATETIME" where name = "time"

schema[`format]=["yyyyMMddHHmmss",,,];


>loadText("C:/DolphinDB/Data/t2.csv",,schema);


time                sym  qty  price

------------------- ---- ---- -----

2019.06.23T14:54:57 AAPL 2200 54.78

2019.06.23T15:54:23 MS   5400 59.64

2019.06.23T16:30:25 IBM  8670 65.23