如何从txt中的某些行的末尾删除多余的分号

时间:2017-11-21 08:20:26

标签: python python-3.x pandas

我是stackoverflow的新手,所以如果我的帖子没有正确发布或者你需要更多信息,请告诉我。所以我有一个非常奇怪的问题。我有一个txt文件,其中许多行以“;”分隔。通常应该有42个字段/列,但由于某种原因导入时我的txt文件中的某些行被“;”分隔它显示了大量被跳过的行,因为python“预计42个字段,看到45”。我使用pandas导入文件,因为我的大部分转换都是用它完成的:

text = pd.read_csv('file.txt',encoding='ISO-8859-1', keep_default_na=False,error_bad_lines=False, sep=';')

我发现的是,对于某些行,我有3个额外的“;”在末尾。因为大多数数据是保密的,我无法在公司外共享,所以我生成了一个类似的3行txt文件,以显示我的问题所在。

  

;;; 5123123;文本1; text2的;;;; 123124;文字3;文本4 ;;;; 5234234; text5; text6 ;;;; 412321; text7; text8 ;;;; 512312; text9; text10 ;;; ; 15123213; text11; text12 ;;;; 123123; text13; text14   ;;; 4666190;文本1; text2的;;;; 312312;文字3;文本4 ;;;; 5123123; text5; text6 ;;;;;;;;;;;;;;;;;;;;;; 55123; text7; text8   ;;; 5123123;文本1; text2的;;;; 1321321;文字3;文本4 ;;;; 123124; text5; text6 ;;;;;;;;;;;;;;;;;;;;;; 3123123; 512312312; text7 ;;;

所以那些与我的文件类似的三行,但是有替换名称。第一行和第二行是正确的,但第三行在导入时会产生45个字段。 那么有没有一种方法可以在导入之前浏览文件并查找以;;;5123123开头的所有行并检查是否有“;”在最后,如果有删除它们,然后导入它们。问题是只有一些行以;;;5123123开头。这个错误有几百行,整个数据只有50多行。

2 个答案:

答案 0 :(得分:0)

我相信pd是pandas,所以你可以使用usecols方法read_csv方法

text = pd.read_csv('file.txt',
                   encoding='ISO-8859-1', 
                   keep_default_na=False,
                   error_bad_lines=False,
                   sep=';',
                   usecols=list(range(43)),
                   names=list(range(43)),
                   headers=None)

<强>被修改 您还可以添加namesheaders参数

答案 1 :(得分:0)

您是否尝试拆分为列表然后删除空白元素?

f = open('file.txt', 'rb')
raw_str = str(f.read())
full_list = raw_str.split(';')
templist = list(filter(None, full_list))

通过打印templist,它给出了所有元素的列表。您可以对其执行任何操作,例如根据您的要求使用for循环再次转换为字符串。输出就像 - enter image description here