早在2013年2月8日20:20,YamSMit提出了一个问题(参见:How to read and write a table / matrix to file with python?),类似于我正在努力解决的问题:开始使用包含3列和1的Excel表格(CSV)不同的行数。列的内容是字符串,浮点和字符串。第一个字符串的长度不同,而另一个字符串可以固定(例如,2个字符)。该表需要进入二维数组,以便我可以对数据进行操作以生成最终文件(这将是一个文本文件)。我已经尝试了stackoverflow中提供的各种策略,但我总是遗漏一些东西,而且我还没有看到所有部分的例子,这就是为什么要努力解决这个问题的原因。
示例数据类似于: Ray Smith,41645.87778,V1
我已阅读并探讨了numpy和astropy,因为可用的文档说它们使这类代码变得容易。我试过导入csv。不知何故,代码没有结合在一起。我应该补充一点,我在Python 3.2.3中编写(由于很多文档都是针对Python 2.x,这似乎是一个错误)。
我意识到这个问题的基本性质指导我阅读更多教程。我已经阅读了很多,但是教程总是指的是不同的,我没有组装正确的部分:读取表格文件,写入2D数组,然后......做更多的东西。
我感谢任何可能为我提供可行的代码大纲的人,或者指出我应该阅读的特定文档来处理我正在尝试编写的代码的特定性质。
非常感谢提前。 (抱歉这个讽刺 - 只是想完成。)
答案 0 :(得分:0)
我对2.x更熟悉,但是从3.3 csv文档found here来看,它似乎与2.x大致相同。以下函数将读取csv文件,并返回文件中找到的行的2D数组。
import csv
def read_csv(file_name):
array_2D = []
with open(file_name, 'rb') as csvfile:
read = csv.reader(csvfile, delimiter=';') #Assuming your csv file has been set up with the ';' delimiter - there are other options, for which you should see the first link.
for row in read:
array_2D.append(row)
return array_2D
然后您可以按如下方式操作数据(假设您的csv文件名为'foo.csv',所需的文本文件为'foo.txt'):
data = read_csv('foo.csv')
with open('foo.txt') as textwrite:
for row in data:
string = '{0} has {1} apples in his Ford {2}.\n'.format(row[0], row[1], row[2])
textwrite.write(string)
#if you know the second column is a float:
manipulate = float(row[1])*3
textwrite.write(manipulate)
然后将字符串写入'foo.txt',如下:
Ray Smith has 41645.87778 apples in his Ford V1.\n
和maniuplate将被写入'foo.txt':
124937.63334