我正在尝试格式化带有行和列的制表符分隔的txt文件。当我写入输出文件时,我试图简单地忽略其中包含任何空值的行。我是通过len(list)方法做的,如果列表的长度等于列数,那么该行将被写入输出文件。但是当我检查线条的长度时,它们都是一样的,即使我删除了空字符串!非常令人沮丧......
这是我的代码:
import sys, os
inputFileName = sys.argv[1]
outputFileName = os.path.splitext(inputFileName)[0]+"_edited.txt"
try:
infile = open(inputFileName,'r')
outfile = open(outputFileName, 'w')
line = infile.readline()
outfile.write(line)
for line in infile:
lineList = line.split('\t')
#print lineList
if '' in lineList:
lineList.remove('')
#if len(lineList) < 9:
#print len(lineList)
#outfile.write(line)
infile.close()
#outfile.close()
except IOError:
print inputFileName, "does not exist."
感谢您的帮助。当我在交互式窗口中创建一个实验列表并使用if''in list:然后它将其删除。当我运行代码时,''仍在那里!
答案 0 :(得分:1)
我认为一个你的问题是list.remove
只删除元素的第一个。列表中可能还有更多空字符串。来自文档:
从列表中删除值为x的第一项。如果没有这样的项目,则会出错。
要remove all the empty strings from your list,您可以使用列表理解。
lineList = [x for x in lineList if x]
带有标识函数的或filter
(通过传递None
作为第一个参数):
lineList = filter(None, lineList)
答案 1 :(得分:1)
我不知道任何python,但我可以提到你似乎没有检查空白字符。怎么样的\ r,\ n在\ t之上。为什么不尝试修剪线并检查它是否==''
答案 2 :(得分:0)
以下用较少的代码行执行您所要求的操作,并通过strip()
调用删除任何类型空格的空行。
#!/usr/bin/env python
import sys, os
inputFileName = sys.argv[1]
outputFileName = os.path.splitext(inputFileName)[0]+"_edited.txt"
try:
infile = open(inputFileName,'r')
outfile = open(outputFileName, 'w')
for line in infile.readlines():
if line.strip():
outfile.write(line)
infile.close()
outfile.close()
except IOError:
print inputFileName, "does not exist."
编辑: 为清楚起见,这将读取输入文件的每一行,然后删除前导和尾随空格行(制表符,空格等),并将非空行写入输出文件。