我正在编写一个通用程序来读取和绘制来自.txt文件的大量数据。每个文件都有不同的列数。我知道每个文件都有8列我不感兴趣,所以我可以通过这种方式找出相关列的数量。如何读取数据并将每个相关列的数据分类到单独的变量中?
这是我到目前为止所做的:
datafile = 'plotspecies.txt'
with open(datafile) as file:
reader = csv.reader(file, delimiter=' ', skipinitialspace=True)
first_row = next(reader)
num_cols = len(first_row)
rows = csv.reader(file, delimiter = ' ', quotechar = '"')
data = [data for data in rows]
num_species = num_cols - 8
我见过有人说大熊猫对这类事情有好处,但我似乎无法导入它。我更喜欢没有它的解决方案。
答案 0 :(得分:7)
Pandas实际上是正确的解决方案。问题在于,为了能够有力地处理某些你不确定底层结构的东西,你需要注意很多边缘情况,并试图将它瞄准{{1模块是令人头疼的问题(尽管可以做到)
至于您无法导入csv
的原因,原因是它默认情况下不会pandas
。在学习语言时要考虑的最重要的事情之一是它允许您访问的包的生态系统。 Python恰好是这方面最好的之一,所以忽略那些不属于标准python的东西就是忽略语言的最佳部分。
如果您使用的是Windows环境,则应首先设置python
。这将允许您以极少的开销无缝地探索python用户可用的许多软件包。这包括conda
,这实际上是处理此问题的正确方法。有关安装conda的更多信息,请参阅此链接:http://conda.pydata.org/docs/install/quick.html
一旦你安装了pandas
,它就像这样简单:
pandas
这很容易。
如果你真的,真的不想使用核心python中没有的东西那么你可以用下面的东西来做这件事,但你还没有给出足够的细节来实际溶液:
import pandas
test = pandas.read_csv(<your_file>)
your_Variable = test[<column_header>]
最不直观的部分是最后一行,所以这里有一个小例子向您展示它是如何工作的:
def col_var(input_file, delimiter):
# get each line into a variable
rows = open(input_file).read().splitlines()
# split each row into entries
split_rows = [row.split(delimiter) for row in rows]
# Re-orient your list
columns = zip(*split_rows)
答案 1 :(得分:1)
好吧,你可以使用csv模块,只要在设置列appart的行中有某种分隔符。
import csv
file_to_read_from = 'myFile.txt'
#initializing as many lists as the columns you want (not all)
col1, col2, col3 = [], [], []
with open(file_to_read_from, 'r') as file_in:
reader = csv.reader(file_in, delimiter=';') #might as well be ',', '\t' etc
for row in reader:
col1.append(row[0]) # assuming col 1 in the file is one of the 3 you want
col2.append(row[3]) # assuming col 4 in the file is one of the 3 you want
col3.append(row[5]) # assuming col 6 in the file is one of the 3 you want