Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
490 views
in Technique[技术] by (71.8m points)

csv - Loading a file into a numpy array with python

So I'm very green with Python and am trying to learn by replicating some matlab code I've written. I have a part where, in matlab, I load a data file that's tab-delimited. The syntax

x = load(data.txt)

Takes the tab delimited data and put them into cells of a matrix labeled x.

Is there a way to do this in python, but with comma-delimited data?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

There are several methods, choose one that is most suitable for your application.

If you are working with numpy, it may be a good idea to use the numpy's load, loadtxt, fromfile or genfromtxt functions, because your file will be loaded into a suitable structure, after the preprocessing.

But if you are not about to work with numpy (or any other big library which has some file loading functionalities), it would be an overkill using it just for loading a file ... Consider using built-in python functions, or the csv module from the standard library instead ... It will be much more flexible, and way smoother.

Here is how, with examples using file.txt (values of each rows are separated with tabs):

1   2   3   4
7   8   9   10  11  12
13  14  15

python built-in

No module to import, pretty easy, flexible, a good option for most situations, imho.

Loading the file in binary mode for reading (rb flags) in a table (list of lists of values, separated in the file with tabs) with only built-in functions:

>>> file = open('file.txt', 'rb')
>>> table = [row.strip().split('') for row in file]

csv

The csv module from the standard library is pretty straightforward as well.

Note that altough CSV means Comma Separated Values, there is actually no standard and you can choose any delimiter you want. Therefore CSV stands for all cells-oriented or table-like files.

Loading the file in binary mode for reading (rb flags) in a table (list of lists of values, separated in the file with tabs) with the csv reader:

>>> import csv
>>> file = open('file.txt', 'rb')
>>> data = csv.reader(file, delimiter='')
>>> table = [row for row in data]

Accessing the cells

The table has been loaded similarly with the two previous examples, and the data of the table can be accessed like table[row][col]:

>>> table
[['1', '2', '3', '4'], ['7', '8', '9', '10', '11', '12'], ['13', '14', '15']]    
>>> table[0]
['1', '2', '3', '4']
>>> table[1][2]
9

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...