小编Bea*_*ing的帖子

如何将CSV文件转换为多线JSON?

这是我的代码,非常简单的东西......

import csv
import json

csvfile = open('file.csv', 'r')
jsonfile = open('file.json', 'w')

fieldnames = ("FirstName","LastName","IDNumber","Message")
reader = csv.DictReader( csvfile, fieldnames)
out = json.dumps( [ row for row in reader ] )
jsonfile.write(out)
Run Code Online (Sandbox Code Playgroud)

声明一些字段名称,读取器使用CSV来读取文件,并使用字段名称将文件转储为JSON格式.这是问题......

CSV文件中的每条记录都在不同的行上.我希望JSON输出方式相同.问题是它将它全部放在一条巨大的长线上.

我尝试过使用类似的东西for line in csvfile:,然后在下面运行我的代码,reader = csv.DictReader( line, fieldnames)通过每行循环,但它在一行上完成整个文件,然后在另一行循环遍历整个文件...继续直到它用完行.

有任何纠正这个的建议吗?

编辑:澄清一下,目前我有:(第1行的每条记录)

[{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"},{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}]
Run Code Online (Sandbox Code Playgroud)

我在找什么:( 2行2条记录)

{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"}
{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}
Run Code Online (Sandbox Code Playgroud)

并非每个单独的字段缩进/在单独的行上,但每个字段都在其自己的行上.

一些样本输入.

"John","Doe","001","Message1"
"George","Washington","002","Message2"
Run Code Online (Sandbox Code Playgroud)

python csv json

82
推荐指数
6
解决办法
18万
查看次数

如何在python中使用unidecode(3.3)

我正在尝试从文本文档中删除所有非ascii字符.我找到了一个应该这样做的软件包,https://pypi.python.org/pypi/Unidecode

它应该接受一个字符串并将所有非ascii字符转换为最接近的ascii字符.我只是通过调用就可以很容易地在perl中使用这个相同的模块,这个模块是perl模块while (<input>) { $_ = unidecode($_); }的直接端口,文档表明它应该工作相同.

我确信这很简单,我对字符和文件编码了解不足以了解问题所在.我的origfile以UTF-8编码(从UCS-2LE转换).问题可能与我缺乏编码知识和处理字符串错误有关,而不是模块,希望有人可以解释为什么.我已经尝试了我所知道的一切,而不是随意插入代码并搜索我到目前为止没有运气的错误.

这是我的python

from unidecode import unidecode

def toascii():
    origfile = open(r'C:\log.convert', 'rb')
    convertfile = open(r'C:\log.toascii', 'wb')

    for line in origfile:
        line = unidecode(line)
        convertfile.write(line)

    origfile.close()
    convertfile.close()

toascii();
Run Code Online (Sandbox Code Playgroud)

如果我没有在字节模式(origfile = open('file.txt','r')中打开原始文件,那么我UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 1563: character maps to <undefined>从该for line in origfile:行得到一个错误.

如果我在字节模式下打开它,'rb'我就会TypeError: ord() expected string length 1, but int found从该line = unidecode(line)行开始. …

python unicode encoding

9
推荐指数
1
解决办法
2万
查看次数

Eclipse存储库失败"无法读取存储库"

我一般不使用Eclipse,所以也许我做错了什么,但我花了几个小时来讨论这个并且找不到问题.

我需要一个Eclipse插件(PigEditor或PigPen)并试图通过存储库安装它,这失败了,下面的错误.当它无法安装时,我下载了.zip版本,解压缩了存档,找到了包含功能和插件目录的文件夹并尝试安装它.这也失败了.我还尝试了一个PigPen .jar,当它放入plugins文件夹时它根本没有被拾取.

我注意到我收到了一堆错误消息,看起来Eclipse正在尝试获取依赖项.例如...

Error
Unable to read repository at http://download.eclipse.org/eclipse/updates/4.3.
java.io.IOException: http://download.eclipse.org/eclipse/updates/4.3 is not a valid repository location.
Run Code Online (Sandbox Code Playgroud)

那应该是一个有效的存储库位置,它在这里列出了一半.这无法读取存储库与尝试从存储库安装上一个插件时获得的错误相同.

然后我转到首选项 - >可用软件站点并尝试了所有默认安装的存储库.有2个被检查(上面列出的那个,和http://download.eclipse.org/releases/kepler)和2个未经检查(http://download.eclipse.org/egit/updateshttp://www.eclipse .org/modeling/updates).我在其中任何一个上重新加载并收到与上面相同的错误消息.

我可以从内部浏览器访问网站.我也尝试将我的网络连接首选项更改为"直接".

我真正关心的是获得一个有效的Pig插件,所以我会接受这个作为答案.虽然我没有获得任何存储库是一个更大问题的症状(而且我真的想知道发生了什么),我感觉到了,所以如果你有故障排除步骤,我愿意尝试任何事情.

网站我正在尝试从以下网站获取Pig编辑器:https : //wiki.apache.org/pig/PigPen http://romainr.github.io/PigEditor/ https://github.com/romainr/PigEditor

eclipse

6
推荐指数
1
解决办法
3万
查看次数

Flume NG没有写入HDFS

我是使用Flume和Hadoop的新手,所以我试图设置最简单(但有些帮助/现实)的例子.我在VM客户端中使用HortonWorks Sandbox.在完成一个教程12(涉及设置和使用Flume)后,一切似乎都正常工作.

所以我应该设置自己的flume.conf

  • 从apache访问日志中读取
  • 使用内存通道
  • 写入HDFS

够简单吧?这是我的conf文件

agent.sources=exec-source
agent.sinks=hdfs-sink
agent.channels=ch1

agent.sources.exec-source.type=exec
agent.sources.exec-source.command=tail -F /var/log/httpd/access_log

agent.sinks.hdfs-sink.type=hdfs
agent.sinks.hdfs-sink.hdfs.path=/flume/events
agent.sinks.hdfs-sink.hdfs.filePrefix=apacheaccess
agent.sinks.hdfs-sink.hdfs.rollInterval=10
agent.sinks.hdfs-sink.hdfs.rollSize=0

agent.channels.ch1.type=memory
agent.channels.ch1.capacity=1000

agent.sources.exec-source.channels=ch1
agent.sinks.hdfs-sink.channel=ch1
Run Code Online (Sandbox Code Playgroud)

我已经看到有几个人在写入HDFS时遇到了问题,并且在大多数情况下,没有足够的日志来填充HDFS块.但是,rollInterval = 10应该每10秒生成一个新文件,只要至少写入1行.我可以在另一个窗口中运行"tail -F/var/log/httpd/access_log"并看到相当一致地写入日志的行,所以我认为不是这样.

这是尝试启动此代理的命令/输出

[root@sandbox ~]# flume-ng agent -f /etc/flume/conf/flume.conf -n apache-agent
Warning: No configuration directory set! Use --conf <dir> to override.
Info: Including Hadoop libraries found via (/usr/bin/hadoop) for HDFS access
Info: Excluding /usr/lib/hadoop/libexec/../lib/slf4j-api-1.4.3.jar from classpath
Info: Excluding /usr/lib/hadoop/libexec/../lib/slf4j-log4j12-1.4.3.jar from classpath
Info: Including HBASE libraries found via (/usr/bin/hbase) for HBASE access
Info: Excluding …
Run Code Online (Sandbox Code Playgroud)

hadoop hdfs flume

2
推荐指数
1
解决办法
6907
查看次数

标签 统计

python ×2

csv ×1

eclipse ×1

encoding ×1

flume ×1

hadoop ×1

hdfs ×1

json ×1

unicode ×1