首页 文章

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

提问于
浏览
0

我是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; text1; text2 ;;;; 123124; text3; text4 ;;;; 5234234; text5; text6 ;;;; 412321; text7; text8 ;;;; 512312; text9; text10 ;;;; 15123213 ; text11; text12 ;;;; 123123; text13; text14 ;;; 4666190; text1; text2 ;;;; 312312; text3; text4 ;;;; 5123123; text5; text6 ;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; 3123123; 512312312; text7 ;;;

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

2 回答

  • 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)
    

    Edited 您还可以添加 namesheaders 参数

  • 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

相关问题