Python 拆分一个";。txt";文件

Python 拆分一个";。txt";文件,python,file,split,Python,File,Split,我有一个.txt文件中的数据,以逗号分隔列表的形式。例如: N12345678,B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D N12345678,B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D 我希望能够将其拆分,首先按行,然后按逗号,这样我就能够处理数据并验证它。我的代码中的所有行都变得“无效”,即使其中一些行应该是有效的,因为每行应该有26个字符。以下是我目前的代码: (filenam

我有一个.txt文件中的数据,以逗号分隔列表的形式。例如:

N12345678,B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D
N12345678,B,A,D,D,C,B,D,A,C,C,D,B,A,B,A,C,B,D,A,C,A,A,B,D,D
我希望能够将其拆分,首先按行,然后按逗号,这样我就能够处理数据并验证它。我的代码中的所有行都变得“无效”,即使其中一些行应该是有效的,因为每行应该有26个字符。以下是我目前的代码:

(filename+".txt").split("\n")
(filename+".txt").split(",")
with open(filename+".txt") as f:
  for line in f:
      if len(line) != 26:
          print ("invalid")
      else:
          print ("valid")

就我理解你的问题而言,你想要这个

with open(filename, 'r') as f:
    for line in f:
        if len(line.split(',')) !=26:
            print("Invalid")
        else:
            print("Valid")
它所做的只是

  • 打开文件
  • 逐行读取文件
  • 对于每一行,按
  • 由于
    str.split()
    返回一个列表,请检查列表的长度是否为26
  • 如果长度为26,则视为有效;否则就不行了

    • 据我所知,你想要这个

      with open(filename, 'r') as f:
          for line in f:
              if len(line.split(',')) !=26:
                  print("Invalid")
              else:
                  print("Valid")
      
      它所做的只是

      • 打开文件
      • 逐行读取文件
      • 对于每一行,按
      • 由于
        str.split()
        返回一个列表,请检查列表的长度是否为26
      • 如果长度为26,则视为有效;否则就不行了

      该代码远未起作用;它在语法上是有效的Python,但并不意味着任何合理的东西

      # These two lines add two strings together, returning a string
      # then they split the string into pieces into a list
      # because the /filename/ has no newlines in it, and probably no commas
      # that changes nothing
      # then the return value isn't saved anywhere, so it gets thrown away
      (filename+".txt").split("\n")
      (filename+".txt").split(",")
      
      # This opens the file and reads from it line by line,
      # which means "line" is a string of text for each line in the file.
      with open(filename+".txt") as f:
        for line in f:
      
            # This checks if the line in the file is not the /number/ 26
            # since the file contains /strings/ it never will be the number 26
            if line != 26:
                print ("invalid")
      
            # so this is never hit
            else:
                print ("valid")
      
      [编辑:即使在更新的代码中,
      也是整个文本
      “N12345678,B,A,D…”
      ,并且由于逗号的原因,len(行)将超过26个字符。]

      您似乎更希望这样:完全删除代码的前两行,逐行阅读文件(这意味着您通常不必关心代码中的“\n”)。然后用逗号分隔每行

      with open(filename+".txt") as f:
        for line in f:
            line_parts = line.split(",")
            if len(line_parts) != 26:
                print ("invalid")
            else:
                print ("valid")
                # line_parts is now a list of strings
                # ["N12345678" ,"B", "A", ...]
      

      这一准则远远不能起作用;它在语法上是有效的Python,但并不意味着任何合理的东西

      # These two lines add two strings together, returning a string
      # then they split the string into pieces into a list
      # because the /filename/ has no newlines in it, and probably no commas
      # that changes nothing
      # then the return value isn't saved anywhere, so it gets thrown away
      (filename+".txt").split("\n")
      (filename+".txt").split(",")
      
      # This opens the file and reads from it line by line,
      # which means "line" is a string of text for each line in the file.
      with open(filename+".txt") as f:
        for line in f:
      
            # This checks if the line in the file is not the /number/ 26
            # since the file contains /strings/ it never will be the number 26
            if line != 26:
                print ("invalid")
      
            # so this is never hit
            else:
                print ("valid")
      
      [编辑:即使在更新的代码中,
      也是整个文本
      “N12345678,B,A,D…”
      ,并且由于逗号的原因,len(行)将超过26个字符。]

      您似乎更希望这样:完全删除代码的前两行,逐行阅读文件(这意味着您通常不必关心代码中的“\n”)。然后用逗号分隔每行

      with open(filename+".txt") as f:
        for line in f:
            line_parts = line.split(",")
            if len(line_parts) != 26:
                print ("invalid")
            else:
                print ("valid")
                # line_parts is now a list of strings
                # ["N12345678" ,"B", "A", ...]
      

      我认为更简单的方法是使用csv模块

      import csv
      
      with open("C:/text.csv") as input:
          reader = csv.reader(input)
          for row in reader:
              if len(row) == 26:
                  print("Valid")
              else:
                  print("Invalid")
      

      我认为更简单的方法是使用csv模块

      import csv
      
      with open("C:/text.csv") as input:
          reader = csv.reader(input)
          for row in reader:
              if len(row) == 26:
                  print("Valid")
              else:
                  print("Invalid")
      

      不应该是
      len(line)!=26
      ?@JRodDynamite好的,对不起。刚刚修复了这个问题,但我仍然得到了所有的“无效”,一旦修复,“每行26个字符”对于您给出的示例来说没有意义。“N12345678”为9个字符。如果使用逗号拆分,则其他项目各为1个字符。你的意思是“每行26项”?不是应该是
      len(行)!=26
      ?@JRodDynamite好的,对不起。刚刚修复了这个问题,但我仍然得到了所有的“无效”,一旦修复,“每行26个字符”对于您给出的示例来说没有意义。“N12345678”为9个字符。如果使用逗号拆分,则其他项目各为1个字符。你是说“每行26个项目”吗?我想知道,两个相同的答案中的一个是如何被投赞成票的,另一个是如何被投反对票的。只是问一下。@JRodDynamite,你有什么意见吗?投票被否决的原因?我想知道,两个相同答案中的一个是如何被否决的。只是问一下。@JRodDynamite,你有什么意见吗?投否决票的原因?回答得好。解释最初方法的错误往往比解释正确的方法更有用。回答得好。解释最初方法的错误往往比解释正确方法的帮助大很多倍。