我的第一个python项目是一个转换器,用于获取MySQL导入的形状数据。 我已经使用target.writelines(data[start:stop])了文件中所有不需要的行。

现在,我有大约2000行是这样的:

1,2011,54,0,.375,-。183,2.325,1.221,0,.016,0,0,431.4,.345,1.563,25.13,13.23

而54代表儒略日。

要导入到具有3行(日期时间,值id,值)的表中,应将其转换为:

2011-23-02 00:00:00,1,-0.183
2011-23-02 00:00:00,2,2.325
2011-23-02 00:00:00,3,1.221
2011-23-02 00:00:00,4,0
2011-23-02 00:00:00,5,0.016
2011-23-02 00:00:00,6,0
2011-23-02 00:00:00,7,0
2011-23-02 00:00:00,8,431.4
2011-23-02 00:00:00,9,0.345
2011-23-02 00:00:00,10,1.563

请注意第一个,第五个和最后两个值已被删除。 每行的第一和第五位出现,最后两位仅出现在0和12点。

我已经读过,可以使用datetime模块将julian的转换存档( 将julian day转换为date )。

您建议使用哪些Python工具有效完成工作?

更新

谢谢CoDEmanX,我以一些替代方式实现了您建议的代码,并且差不多完成了。 还有2个问题:

  1. 是否存在正确处理leap年的内置方式(例如,ju联60应该在a年的2月29日和其他年份的3月1日)?

  2. 我尝试执行时间(小时,分钟)。 由于时间var的长度不同(1-4个字符),所以我当前的实现只能在1000到2355之间工作。我可以轮询时间长度,并针对每种情况使用日期格式命令。 我的猜测是,有一个更简单的解决方案。

     lines = f_open.readlines() # split string and ignore unwanted elements for line in lines: _, year, julian, time, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, *_ = line.split(",") # format date, convert julian day-of-year to 'day-month' date = "%s-%s %s:%s:00" % (int(year), datetime.strptime(julian, "%j").strftime("%m-%d"), time[:2], time[2:]) with open(targetName, 'a') as target: target.write(",".join((date, "1", value1+"\\n"))) target.write(",".join((date, "2", value2+"\\n"))) target.write(",".join((date, "3", value3+"\\n"))) target.write(",".join((date, "4", value4+"\\n"))) target.write(",".join((date, "5", value5+"\\n"))) target.write(",".join((date, "6", value6+"\\n"))) target.write(",".join((date, "7", value7+"\\n"))) target.write(",".join((date, "8", value8+"\\n"))) target.write(",".join((date, "9", value9+"\\n"))) target.write(",".join((date, "10", value10+"\\n"))) 

===============>>#1 票数:0 已采纳

内置的python模块应该足够了。 避免过早的优化 ,仅在简单的解决方案变得太慢的情况下才寻找提高速度和效率的方法。

from datetime import datetime

line = "1,2011,54,0,.375,-.183,2.325,1.221,0,.016,0,0,431.4,.345,1.563,25.13,13.23"

# split string and ignore 4th and every thing from the 6th element on
id, year, julian, _, value, *_ = line.split(",")

# format date, convert julian day-of-year to 'day-month'
date = "%s-%s 00:00:00" % (int(year), datetime.strptime(julian, "%j").strftime("%d-%m"))

print(",".join((date, id, value)))
#>>> 2011-23-02 00:00:00,1,.375

# could cast to numeric types if needed
#id = int(id)
#value = float(value)

真正的儒略历日期的years年不容易处理,特别是在查看有关儒略历的Wiki文章时-甚至不一致(例如更改为公元前45年左右的日历系统)。

datetime模块的确需要leap年,如果您提供的是年份和年份,则为:

>>> datetime.strptime("2004 60", "%Y %j")
datetime.datetime(2004, 2, 29, 0, 0)

>>> datetime.strptime("2005 60", "%Y %j")
datetime.datetime(2005, 3, 1, 0, 0)

因此,您可以像这样计算日期:

date = datetime.strptime(year+julian, "%Y%j").strftime("%Y-%d-%m")

所有这些以及将值拆分为多行:

from datetime import datetime

# ...
lines = f_open.readlines()

# split string and ignore unwanted elements
for line in lines:
    _, year, julian, time, *values = line.split(",")

# format date, convert julian day-of-year to 'day-month'
    date = datetime.strptime(year+julian, "%Y%j").strftime("%Y-%d-%m")
    time = datetime.strptime(time.rjust(4, "0"), "%H%M").strftime("%H:%M:%S")
    timestamp = "%s %s" % (date, time)

    with open(targetName, 'a') as target:
        for i, value in enumerate(values[:10], 1):
            target.write(",".join((timestamp, str(i), value)))
            target.write("\n")

  ask by blade_runner translate from so

未解决问题?本站智能推荐:

1回复

使用Python 3.x和精美汤解析网页

我正在尝试按标题的类别(可搜索的,从手工召唤的特殊召唤等)来解析此网页 ,我一直在寻找一个适用于3.3的良好解析器,但我所能找到的只是BeautifulSoup(我可以无法安装,因为它仍然在2.x)和lxml中编码,我无法理解。 我尝试读取HTML本身,并在代码中搜索标头,但无济于事。 谁能
2回复

在python 3.3中将带有空格的字符串转换为html url

我正在尝试将带空格的YQL字符串转换为html代码。 这是我正在使用的YQL字符串: 这是需要出现的网址代码: 我一直试图用urllib.parse.urlencode做这个,但没有运气。 我可以起床“ http://query.yahooapis.com/v1/pu
2回复

Python-将带括号的数字字符串转换为整数值

编辑:由下面的Haidro解决。 也感谢大家的帮助。 每次谷歌搜索后一直潜伏在这里一段时间,却从未意识到这个社区有多活跃! 再次感谢 :)。 我正在尝试转换以下内容: 只是: 我已经尝试使用如下代码: 但得到一个错误: invalid literal f
1回复

Python 3.3中的BeautifulSoup错误

我只是试图解析此站点,并且使用BeautifulSoup时不断出错。 有人可以帮助我确定问题所在吗?
2回复

快速MySQL导入

编写脚本来转换MySQL导入的原始数据我到目前为止使用了临时文本文件,后来我使用LOAD DATA INFILE ...命令手动导入。 现在我将import命令包含在python脚本中: 这有效,但temp.txt必须在数据库目录中,这不适合我的需要。 下一个approch正
2回复

用于jit代码的python mmap

我正在尝试模仿本教程( http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html )来编写简单的jit。 我不确定mmap的python接口是否支持以下用例。 C代码(以防链接失效)如下所示。
2回复

分段错误:11将数学导入Python时[重复]

这个问题在这里已有答案: 运行两个命令时Python崩溃(Segmentation Fault:11) 2个答案 每次我尝试从数学导入时都会崩溃。 有没有办法重新安装数学库? 我在使用Python 3.3.2。
2回复

Python 3.3无法导入Crypt

当我在命令行输入导入Crypt时,它说:
4回复

导入任意的python源文件。 (Python 3.3以上版本)

如何在Python 3.3+中导入任意的python源文件(其文件名可以包含任何字符,并且并不总是以.py结尾)? 我使用imp.load_module如下: 它仍然可以在Python 3.3中运行,但是根据imp.load_module文档,已弃用: 从版本3.3开始不推荐使用:不需要
2回复

python子文件夹导入混乱

假设我有一个看起来像这样的文件夹结构: 这些文件具有以下内容: b.py: a.py: main.py: 如果我运行python3.3 A/a.py或python3.3 B/b.by ,则没有错误。 但是,如果我运行python3.3 main.py ,则