我试图解析一系列文本文件,并使用Python(2.7.3)将它们保存为CSV文件。所有文本文件都有一个4行长的头,需要删除。数据行有各种分隔符,包括“(引号)、—(破折号)、:列和空格。我发现在C++中用所有这些不同的分隔符来编码它是一种痛苦,所以我决定在Python中尝试它比C/C++更容易。
我写了一段代码来测试一行数据,它工作了,但是,我无法让它工作在实际的文件中。为了解析一行代码,我使用了文本对象和“replace”方法。看起来我当前的实现将文本文件读取为列表,并且列表对象没有替换方法。
作为一个Python新手,我被困在这一点上。任何意见都将不胜感激!
谢谢!
# function for parsing the data
def data_parser(text, dic):
for i, j in dic.iteritems():
text = text.replace(i,j)
return text
# open input/output files
inputfile = open('test.dat')
outputfile = open('test.csv', 'w')
my_text = inputfile.readlines()[4:] #reads to whole text file, skipping first 4 lines
# sample text string, just for demonstration to let you know how the data looks like
# my_text = '"2012-06-23 03:09:13.23",4323584,-1.911224,-0.4657288,-0.1166382,-0.24823,0.256485,"NAN",-0.3489428,-0.130449,-0.2440527,-0.2942413,0.04944348,0.4337797,-1.105218,-1.201882,-0.5962594,-0.586636'
# dictionary definition 0-, 1- etc. are there to parse the date block delimited with dashes, and make sure the negative numbers are not effected
reps = {'"NAN"':'NAN', '"':'', '0-':'0,','1-':'1,','2-':'2,','3-':'3,','4-':'4,','5-':'5,','6-':'6,','7-':'7,','8-':'8,','9-':'9,', ' ':',', ':':',' }
txt = data_parser(my_text, reps)
outputfile.writelines(txt)
inputfile.close()
outputfile.close()
有几种方法可以解决这个问题。一种选择是使用
inputfile.read()
而不是inputfile.readlines()
-您需要编写单独的代码来删除前四行,但是如果您仍然希望最终输出为单个字符串,这可能最有意义。第二个更简单的选项是在用
my_text = ''.join(my_text)
条带化前四行之后重新连接字符串。这有点低效,但是如果速度不是主要问题,代码将是最简单的。最后,如果您真的希望输出为字符串列表而不是单个字符串,那么您可以修改数据解析器以在列表上迭代。可能是这样的:
从公认的答案来看,你想要的行为是
进入
如果这是对的,那么我想
会比
reps
的东西简单一点。我将使用
for
循环遍历文本文件中的行:如果希望逐行读取文件,而不是在脚本开始时加载整个文件,可以执行以下操作:
相关问题 更多 >
编程相关推荐