需要帮助将文本转换为csv格式

大家好。我正在研究一个小计划,以帮助我的妻子分类她/
我们的优惠券。我找到了一个很好的资源,但需要格式化的帮助
文本数据,以便我可以将其导入MySQL数据库。这是
数据格式:
409220000003 Life Fitness产品$ 1(12-13-08)(CVS)
546500181141 OUST空气消毒剂,任何B1G1F最高3.49美元(1-17-09).35
每个
518000159258 Pillsbury Crescent晚餐卷,任何.25(2-14-09)
518000550406 Pillsbury冷冻大饼干,肉桂卷,Mini
肉桂卷等.40(2-14-09)
第一个值(大数)是UPC,下一个元素是
优惠券描述,然后是括号中的日期。那是
我只关心三个要素。有人可以帮我吗
重新格式化:
409220000003 Life Fitness产品$ 1(12-13-08)(CVS)
546500181141 OUST空气消毒剂,任何B1G1F最高3.49美元(1-17-09).35
每个
518000159258 Pillsbury Crescent晚餐卷,任何.25(2-14-09)
518000550406 Pillsbury冷冻大饼干,肉桂卷,Mini
肉桂卷等.40(2-14-09)
像这样的事情:
" 4092200003"," Life Fitness产品$ 1"," 12-13-08"
" 546500181141","驱逐空气消毒剂,任何B1G1F最高$ 3.49"," 1-17-09"
" 518000159258"," Pillsbury Crescent晚餐卷,任何.25"," 2-14-09"
" 518000550406"," Pillsbury Frozen Grands饼干,肉桂卷,Mini
肉桂卷等.40"," 2-14-09"
任何帮助,伪代码或正确的方向推动
最受赞赏。我是新手Python程序员,但我确实有一个
良好的PHP编程经验。
谢谢你的时间....

# 回答1


11月21日,10:18*AM,Chuck Connors 我想知道PHP的经验是否无法使用搜索的能力
引擎寻求帮助之前...
# 回答2


朋友,感谢您的推动,朋友。
# 回答3


409220000003 Life Fitness产品$ 1(12-13-08)(CVS)
REGEXP应该能够相当整洁:
导入
r = re.compile(r"^(\ d+)\ s+(。 ")
out = file('out.csv','w')
对于我,在枚举中行(file('in.txt')):
M = R.Match(线)
如果不是m:
打印" line%i已畸形"%(i+1)
继续
out.write(','。加入(
'"%s"'%item.strip()。替换('"','""')
对于M.Groups()中的项目
))
out.write('\ n')
out.close()
-tkc
# 回答4


查克·康纳斯(Chuck Connors)在2008年11月21日上午8:18写道:
好吧,您可以使用Regex解析这三个部分...
另一方面,如果您没有
已经用来纠正。尝试这个:
'4092200003'
"生活健身产品$ 1(12-13-08)(CVS)"
"生活健身产品$ 1"
'12 -13-08)(CVS)'
'12 -13-08'
因此,三行代码可为您提供三个字段。
有很多方法可以做到这一点。这是一个:
'" 4092200003"," Life Fitness产品$ 1"," 12-13-08"'
干杯,
- 乔
P.S.不关注想要开车新的脾气暴躁的灰熊
用户远离Python。有很多友好和乐于助人
人h 也是。 :)
# 回答5


哇!与上一篇文章相比,方向有什么变化。谢谢
为了帮助和解释。这会很好!
# 回答6


乔治·萨基斯(George Sakkis)写道:
我想知道PHP的经验是否无法使用搜索的能力
引擎在寻求帮助之前...
我想知道为什么您要写这篇文章。下次,拯救自己
十秒钟,只需跳到下一条消息即可。世界将是一个
更好的地方。
虽然我们是我们的crabby Smitigh-y'rs-Steve
- -
史蒂夫·霍顿+1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
# 回答7


>> qfields = ['"'' + fld.strip() +'""(num,desc,date)的fld]
只是在这里快速注意,以防止操作的混乱...
应该
','。加入(Qfields)
-tkc
# 回答8


蒂姆·蔡斯(Tim Chase)写道:
这里只是一个快速注意,以防止操作的混乱...这应该是
','。加入(Qfields)
老实说,使用STDLIB CSV模块很容易
我总是建议这样做,尤其是在覆盖
所有那些带有嵌入式逗号和
报价和东西。它经过了地狱和回头测试。
通常,对于字段列表:
导入CSV<br />
字段= [<br />
(" Tim Golden",40," Inf,O1"),<br />
("弗雷德·史密斯",25," info2"),<br />
(" Joe O'Reilly",55,'Inf," Blah",O3'),##很多混乱<br />
这是给予的<br />
ofile = open(" data.csv"," wb")<br />
尝试:<br />
writer = csv.writer(ofile)<br />
writer.writerows([[[[str(i)for f in f] for for for for for forn fields in f inf inf Fields]))))<br />
最后:<br />
ofile.close()
# 回答9


蒂姆·戈登(Tim Golden)在2008年11月21日上午9:22写道:
在这里快速注意,以防止op的混乱...这个问题应该是','。加入(qfields)

感谢Tim#1,指出了我的错误(我的标准过程
加入是[1]向后做,[2]诅咒自己,[3]做
正确,但看起来我只将步骤1复制到电子邮件中)。
并感谢Tim#2,指出了这一点。我坦率地忘记了
关于它,但这是很好的建议。
这里的后续问题...真的有必要关闭事物
喜欢Python中的文件?我一直在真实的基础上陷入困境
过去十年的社区,您通常不必担心
这样的事情,例如代表"开放"的某些对象
死亡时自动"关闭"本身(并且由于封闭的对象
在这些情况下是没有用的,我宁愿在
无论如何关闭)。在Python中是相同的,还是我们需要
明确关闭事物?
谢谢,
- 乔

# 回答10


乔·斯特劳特(Joe Strout)写道:
实施依赖。 (因为这取决于哪种
发生垃圾收集或对象最终确定)。喜欢
我想,大多数人在临时代码中,我会做的事情
喜欢:
<代码
导入CSV
writer = csv.writer(open(" data.csv"," wb"))
writer.writerow(['blah',blah'])

如果我在这里退出口译员,我几乎是安全的。
但是,如果我添加os.startfile(" data.csv"),我可能会
一无所获或文件锁。
我相信 其他实现 - Jython,
例如 - 您不能依靠文件关闭
本身。
通常,发布公共法规,尤其是
新来者,我努力尝试使用
或陈述。
tjg
# 回答11


蒂姆·戈登(Tim Golden)写道:
这里只是一个快速注意,以防止操作的混乱...这应该是','。加入(qfields)

老实说,使用STDLIB CSV模块很容易
我总是建议这样做,尤其是在覆盖
所有那些带有嵌入式逗号和
报价和东西。它经过了地狱和回头测试。
[Cedes指向Timg]
是的,CSV模块中有一些很棒的东西,我
定期将其用于 *读 * CSV文件。但是写它们,
(出于我的目的)通常同样快地编码我的第一名
帖子的Quickie是要在文档/docstrings中划的
请记住如何让CSV进行创作。但是蒂格是正确的
使用CSV是_right_做到的方法...必须留出一些
为OP工作:)
太多tims-on-c.l.p'yers,
-tkc

# 回答12


蒂姆·蔡斯(Tim Chase)写道:
好吧,我要指出的是,这并不难记住
当我意识到我不需要str()-ED时,这些功能
这些值因为模块为您做到这一点。碰巧我
通常觉得很容易记住。
但我认为这是其中之一
您倾向于思考的模块:为什么要打扰?只是一个
","。加入(str(i)for f in f)。直到您击中嵌入式报价
或不规则的定界符。而且您意识到您已经产生了
Monster GenExp。然后 *然后 *您伸手去拿"导入CSV" :)
tjg
# 回答13


蒂姆·戈登(Tim Golden)写道:
实施依赖。 (因为这取决于哪种
发生垃圾收集或对象最终确定)。喜欢
我想,大多数人在临时代码中,我会做这样的事情:
<代码
导入CSV
writer = csv.writer(open(" data.csv"," wb"))
writer.writerow(['blah',blah'])

如果我在这里退出口译员,我几乎是安全的。
但是,如果我添加os.startfile(" data.csv"),我可能会
一无所获或文件锁。
我相信在其他实施中 - Jython,
例如 - 您不能依靠文件关闭
本身。
文件对象为时,该文件将自动关闭
垃圾收集。
cpython使用参考计数,因此文件对象是垃圾收集的
一旦没有引用。
Jython(和Ironpython?)是在背景中收集垃圾的
文件对象在某个时候会收集垃圾(您不知道什么时候
那将是!)当不再有任何引用时。
# 回答14


在2008-11-21 16:18,查克·康纳斯(Chuck Connors)写道:
看看CSV模块:http://www.python.org/doc/2.5.2/lib/module-csv.html
- -
马克·安德烈·伦堡
egenix.com
直接来自来源的专业Python服务(2008年11月21日,#1)
______________________________________________________________________________________________________
2008-11-12:发布mxodbc.connect 0.9.3 http://python.egenix.com/
::::尝试mxodbc.zo PE.DA用于Windows,Linux,Solaris,MacOSX免费! ::::
egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48
D-40764德国Langenfeld。首席执行官大队。马克·安德烈·伦堡
在Amtsgericht Duesseldorf注册:HRB 46611
# 回答15


MRAB在2008年11月21日上午10:26写道:
谢谢大家的澄清。这是一个重要的区别。
(RealBasic使用参考计数,因此您可以保证该文件
失去最后一个参考后,将立即关闭,但我看到
我们不应该在Python世界中指望这一点。)
最好的,
- 乔
# 回答16


11月21日11:05*上午,史蒂夫·霍尔顿(Steve Holden) 我想知道为什么您要写这篇文章。下次,拯救自己
十秒钟,只需跳到下一条消息即可。世界将是一个
更好的地方。
RTFM和进行基本搜索是一种更好的方法
世界是一个更好的地方。
乔治
# 回答17


乔治·萨基斯(George Sakkis)

RTFM和进行基本搜索是一种更好的方法
世界是一个更好的地方。
乔治
因此,您将以这种语气回答每个问题
具有Google可以发现的答案,并深入了解" FM"
那我想?

# 回答18


查克·康纳斯(Chuck Connors)写道:
嗨,查克,
不要推迟,并不是这里的每个人都很粗鲁,你在问什么
并不是那么微不足道,以证明那些燃烧的RTFM Horsecrap是合理的。你是
从PHP转移到Python-这是庆祝的原因!欢迎 :-)
无论如何,我可以看到两种攻击方法,您可以写一个
有限状态机或使用正则表达式。我的偏爱是
常用表达。
以下应该做您想做的事,尽管我没有进行太多测试
而且您可能想查找源文本中的违规行为
喜欢线折扣等...
导入
regex = re.compile("([0-9] {3,13}))([^(]*)\(([^)]*)")
对于regex.findall(source_data)中的每个人:
打印'''+每个[0]+'","'+每个[1]+'","'+每个[2]+'""
我不知道您是否已经知道其他一些
语言所以我不会为此解释这一点,而不是说你可能
注意Pythons Regex语法通常比许多其他
语言实现。如果这对您来说是全新的,那么您确实需要
这只是让我知道的,我会很高兴能使您度过难关。
另外,您说您的最终目标是SQL数据库。如果数据库是
本地(或通过网络到达),那么您可能会成为
最好使用Python使用MySQLDB直接连接到它
模块...
导入mysqldb
db = mysqldb.connect(host =" localhost",
用户=" uname",
passwd =" pwd",
db =" dbname")
光标= db.cursor()
cursor.execute("在此处插入您的sql查询")
db.commit()
希望这可以帮助,
罗杰。
# 回答19


11月21日,2:01*下午,理查德·莱利(Richard Riley) 因此,您将以这种语气回答每个问题
具有Google可以发现的答案,并深入了解" FM"
那我想?
不,只对那些公然明显的那些没有任何东西
努力自己找到答案; " Python CSV"
Google中的1,420,000次命中,第一个链接到CSV模块
文档。随时查看我在C.L.Py的4年发布历史记录
对我的帖子的有用性和语调更加准确。
乔治
# 回答20


11月22日,7:38*上午,乔治·萨基斯(George Sakkis)<乔治·萨克(George.Sak)...
不,只对那些公然明显的那些没有任何东西
努力自己找到答案; " Python CSV"
Google中的1,420,000次命中,第一个链接到CSV模块
文档。
如果我必须在python中编写这样的脚本,我将使用RE和CSV
模块的方式与已经发布的响应类似。如果我不得不
将其写入PHP,这是我的第一个PHP脚本,所以让我们去搜索:
Google(" PHP Regex")首次命中:http://www.regular-expressions.info/php.html
[YUK,3个不同的工具包;第三是PCRE,让我们尝试一下]
Google(" php csv")第三点点:http://www.php.net/manual/manual/en/function.fputcsv.php
对我来说似乎并不难。
我有兴趣从OP那里听到他的经验水平
在PHP中,他将如何解决PHP中的问题,以及为什么他
在Python中没有寻找类似的方式。
# 回答21


>>>>> 11月21日上午10:18,查克·康纳斯(Chuck Connors)
约翰·马奇(John Machin)写道:
我确定不是,也不是我
已经知道他需要什么!您认为如果OP知道全部
正式表达式,并理解Python具有方便的CSV模块
他会在这里问这个问题吗?
OP用于php,这是一种相当不同的鱼水壶。令人作呕
虽然PHP是很多人的第一个编程语言,但通常是
Web服务器上MOD_PHP的不愉快形式 - 显然我们不是
在这里与Linux内核黑客打交道。
我认为来这里并寻求"帮助,
伪代码,或任何推向正确方向的推动",我当然
没有必要开始质疑他的信条。
他需要了解RE和CSV模块。最小而礼貌
响应可能是:GO和Google for RE和CSV模块。你
本来可以打字的,节省了几百个击键和
在此过程中帮助某人。
如果您甚至无法召集那种水平的热情或礼貌
然后,您总是可以选择不响应。
: - //
罗杰。
# 回答22


11月22日,2:28*am,乔·斯特劳特(Joe Strout) 如果您使用上下文管理器(2.6+,可在2.5中使用
__未来__):
用open(data.csv','wb')作为csvfile:
writer = csv.writer(csvfile)
...
保证该文件在陈述结束时关闭
堵塞。

标签: python

添加新评论