用Python读取文本文件,以';分隔';和'';as线路终端

用Python读取文本文件,以';分隔';和'';as线路终端,python,csv,pandas,text-files,Python,Csv,Pandas,Text Files,我的问题是,我有多个大小为200mb+的文本文件采用这种格式(很少有示例): 我需要阅读所有这些文件并分析信息、图表、总和等 我一直在考虑用不同的方法来保存数据并在Python中使用它。但是,行终止符“;”每次尝试将数据加载到数据库或直接在Python中加载时(也尝试使用lineterminator参数),都会导致问题,例如: import pandas as pd userHeader = ['name', 'last_name', 'number'] users = pd.read_tabl

我的问题是,我有多个大小为200mb+的文本文件采用这种格式(很少有示例):

我需要阅读所有这些文件并分析信息、图表、总和等

我一直在考虑用不同的方法来保存数据并在Python中使用它。但是,行终止符“;”每次尝试将数据加载到数据库或直接在Python中加载时(也尝试使用lineterminator参数),都会导致问题,例如:

import pandas as pd
userHeader = ['name', 'last_name', 'number']
users = pd.read_table('C:/prueba.txt', engine='python', sep=',', header=None, names=userHeader)

# print 3 first users
print '# 3 first users: \n%s' % users[:2]
结果:

# 3 first users: 
           name        last_name              number
0  john,smith,3  sasha,dilma,4  sofia,vergara,5
编辑。当我像这样实现lineterminator时:

users = pd.read_table('C:/prueba.txt', engine='python', sep=',', lineterminator=';', header=None, names=userHeader)
我得到以下信息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-23a80631d090> in <module>()
      1 import pandas as pd
      2 userHeader = ['user_id', 'gender', 'age']
----> 3 users = pd.read_table('C:/prueba.txt', engine='python', sep=';', lineterminator=';', header=None, names=userHeader)
      4 
      5 # print 5 first users

C:\Users\molmos\Anaconda\lib\site-packages\pandas\io\parsers.pyc in parser_f(filepath_or_buffer, sep, dialect, compression, doublequote, escapechar, quotechar, quoting, skipinitialspace, lineterminator, header, index_col, names, prefix, skiprows, skipfooter, skip_footer, na_values, na_fvalues, true_values, false_values, delimiter, converters, dtype, usecols, engine, delim_whitespace, as_recarray, na_filter, compact_ints, use_unsigned, low_memory, buffer_lines, warn_bad_lines, error_bad_lines, keep_default_na, thousands, comment, decimal, parse_dates, keep_date_col, dayfirst, date_parser, memory_map, float_precision, nrows, iterator, chunksize, verbose, encoding, squeeze, mangle_dupe_cols, tupleize_cols, infer_datetime_format, skip_blank_lines)
    472                     skip_blank_lines=skip_blank_lines)
    473 
--> 474         return _read(filepath_or_buffer, kwds)
    475 
    476     parser_f.__name__ = name

C:\Users\molmos\Anaconda\lib\site-packages\pandas\io\parsers.pyc in _read(filepath_or_buffer, kwds)
    248 
    249     # Create the parser.
--> 250     parser = TextFileReader(filepath_or_buffer, **kwds)
    251 
    252     if (nrows is not None) and (chunksize is not None):

C:\Users\molmos\Anaconda\lib\site-packages\pandas\io\parsers.pyc in __init__(self, f, engine, **kwds)
    564             self.options['has_index_names'] = kwds['has_index_names']
    565 
--> 566         self._make_engine(self.engine)
    567 
    568     def _get_options_with_defaults(self, engine):

C:\Users\molmos\Anaconda\lib\site-packages\pandas\io\parsers.pyc in _make_engine(self, engine)
    709             elif engine == 'python-fwf':
    710                 klass = FixedWidthFieldParser
--> 711             self._engine = klass(self.f, **self.options)
    712 
    713     def _failover_to_python(self):

C:\Users\molmos\Anaconda\lib\site-packages\pandas\io\parsers.pyc in __init__(self, f, **kwds)
   1420         # Set self.data to something that can read lines.
   1421         if hasattr(f, 'readline'):
-> 1422             self._make_reader(f)
   1423         else:
   1424             self.data = f

C:\Users\molmos\Anaconda\lib\site-packages\pandas\io\parsers.pyc in _make_reader(self, f)
   1495         if sep is None or len(sep) == 1:
   1496             if self.lineterminator:
-> 1497                 raise ValueError('Custom line terminators not supported in '
   1498                                  'python parser (yet)')
   1499 

ValueError: Custom line terminators not supported in python parser (yet)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
1进口熊猫作为pd
2 userHeader=['user_id','gender','age']
---->3 users=pd.read_table('C:/prueba.txt',engine='python',sep='';',lineterminator='';',header=None,names=userHeader)
4.
5#打印5个第一用户
解析器中的C:\Users\molmos\Anaconda\lib\site packages\pandas\io\parsers.pyc(文件路径或缓冲区、sep、方言、压缩、双引号、转义、引号、引号、skipinitialspace、行终止符、标题、索引列、名称、前缀、SkipRous、skipfooter、skipfooter、skipfooter、na_值、na_值、true_值、false_值、分隔符、转换器、数据类型、usecols、引擎、delim_空格、as_recarray、na_筛选器、compact_ints、,使用无符号、内存不足、缓冲区行、警告行、错误行、保留默认行、千行、注释、十进制、解析日期、保留日期列、dayfirst、日期解析器、内存映射、浮点精度、nrows、迭代器、块大小、冗余、编码、压缩、篡改重复列、tupleize列、推断日期时间格式、跳过空白行)
472跳过空白行=跳过空白行)
473
-->474返回读取(文件路径或缓冲区,kwds)
475
476解析器名称
C:\Users\molmos\Anaconda\lib\site packages\pandas\io\parsers.pyc in_read(文件路径或缓冲区,kwds)
248
249#创建解析器。
-->250解析器=文本文件读取器(文件路径或缓冲区,**kwds)
251
252如果(nrows不是None)和(chunksize不是None):
C:\Users\molmos\Anaconda\lib\site packages\pandas\io\parsers.pyc在uuuu初始化中(self,f,engine,**kwds)
564 self.options['has_index_names']=kwds['has_index_names']
565
-->566自动制造发动机(自动发动机)
567
568 def _get _选项(带有默认值)(自身,引擎):
C:\Users\molmos\Anaconda\lib\site packages\pandas\io\parsers.pyc in\u make\u engine(self,engine)
709 elif引擎==“python fwf”:
710 klass=FixedWidthFieldParser
-->711 self.\u engine=klass(self.f,**self.options)
712
713定义故障切换到python(自):
C:\Users\molmos\Anaconda\lib\site packages\pandas\io\parsers.pyc在uuuu初始化中(self,f,**kwds)
1420#将self.data设置为可以读取行的内容。
1421如果hasattr(f,“readline”):
->1422自动制造读卡器(f)
1423其他:
1424 self.data=f
C:\Users\molmos\Anaconda\lib\site packages\pandas\io\parsers.pyc在\u make\u阅读器中(self,f)
1495如果sep为无或len(sep)==1:
1496如果自连线终止符:
->1497 raise VALUERROR('中不支持自定义行终止符'
1498‘python解析器(尚未)’)
1499
ValueError:python解析器中不支持自定义行终止符(尚未)
您知道如何读取和操作存储在文本文件中的所有这些信息吗


感谢您的帮助。

sep
是字段的分隔符。行终止符在
lineterminator
中给出

users = pd.read_table('C:/prueba.txt', engine='c', sep=',', lineterminator=';', header=None, names=userHeader)

使用
lineterminator

df = pd.read_table('C:/prueba.txt', sep=',', lineterminator=';', header=None, names=userHeader)

In [62]: df
Out[62]:
    john    smith  3
0  sasha    dilma  4
1  sofia  vergara  5

添加参数
lineterminator=“;”

您必须省略
engine='python'
,因为错误:

ValueError:python解析器中不支持自定义行终止符(尚未)

:

行终止符:字符串(长度1),默认为无

字符将文件拆分为行。仅对C解析器有效


非常感谢,这就是问题所在。你知道当你有这样一个行终止符(带双“;”)时该怎么办吗?例如:约翰,史密斯,3;;萨沙,迪尔玛,4岁;;索菲亚,维尔加拉,5岁;;等等。它的长度必须为1,因为它是以这种方式实现的。
df = pd.read_table('C:/prueba.txt', sep=',', lineterminator=';', header=None, names=userHeader)

In [62]: df
Out[62]:
    john    smith  3
0  sasha    dilma  4
1  sofia  vergara  5
import pandas as pd
import io

temp=u"""john,smith,3;sasha,dilma,4;sofia,vergara,5"""

userHeader = ['name', 'last_name', 'number']
users = pd.read_table(io.StringIO(temp), sep=',', lineterminator=";",header=None, names=userHeader)
print users
#    name last_name  number
#0   john     smith       3
#1  sasha     dilma       4
#2  sofia   vergara       5