Python 通过索引从列表中的多行中删除特定字符
我有一个包含多个ascii编码txt文件的文件夹,希望打开所有这些文件,读取所有行,写入文件并删除空白(如果有),同时更改/删除列表中第四个对象的第一个数字 一个文件内容如列表所示:Python 通过索引从列表中的多行中删除特定字符,python,list,indexing,Python,List,Indexing,我有一个包含多个ascii编码txt文件的文件夹,希望打开所有这些文件,读取所有行,写入文件并删除空白(如果有),同时更改/删除列表中第四个对象的第一个数字 一个文件内容如列表所示: [' 0.200000\n', ' 0.000000\n', ' 0.000000\n', ' -0.200000\n', ' 3400000.100000\n', ' 5867999.900000\n'] 最后应该是这样的: ['0.200000\n',
[' 0.200000\n', ' 0.000000\n', ' 0.000000\n', ' -0.200000\n', ' 3400000.100000\n', ' 5867999.900000\n']
最后应该是这样的:
['0.200000\n', '0.000000\n', '0.000000\n', '-0.200000\n', '400000.100000\n', '5867999.900000\n']
第四个对象中没有空格和第一个数字
到目前为止,我的代码是:
import glob, fileinput, os, shutil, string, tempfile, linecache,sys
pfad = "D:\\Test\\"
filelist = glob.glob(pfad+"*.tfw")
if not filelist:
print "none tfw-file found"
sys.exit("nothing to convert")
for fileName in fileinput.input(filelist,inplace=True):
data_list = [''.join(s.split()) for s in data_list]
data_list[4]= data_list[4][1:]
print(data_list)
sys.stdout.write(data_list)
我已经设法同时修改了这些文件,但仍然无法用新内容覆盖它们。我收到以下错误:
“数据_列表=[''.join(s.split())表示数据_列表中的s]
名称错误:未定义名称“数据列表”这符合您的要求:
import io
file0 = io.StringIO(''' 0.200000
0.000000
0.000000
-0.200000
3400000.100000
5867999.900000
''')
def read_data(fle):
out_str = ''
for (i, line) in enumerate(file0.readlines()):
if i != 4:
out_str += '{}\n'.format(line.strip())
else:
out_str += '{}\n'.format(line.strip()[1:])
return out_str
print(read_data(file0))
我不完全清楚你所说的“索引字符”是什么意思。在python中,字符串的行为类似于字符列表。您可以使用
string[5]
对单个字符进行寻址,或获取切片string[5:-1]
。这回答了你的问题吗?这就是你想要的:
import io
file0 = io.StringIO(''' 0.200000
0.000000
0.000000
-0.200000
3400000.100000
5867999.900000
''')
def read_data(fle):
out_str = ''
for (i, line) in enumerate(file0.readlines()):
if i != 4:
out_str += '{}\n'.format(line.strip())
else:
out_str += '{}\n'.format(line.strip()[1:])
return out_str
print(read_data(file0))
我不完全清楚你所说的“索引字符”是什么意思。在python中,字符串的行为类似于字符列表。您可以使用
string[5]
对单个字符进行寻址,或获取切片string[5:-1]
。这回答了你的问题吗?这就是你想要的:
import io
file0 = io.StringIO(''' 0.200000
0.000000
0.000000
-0.200000
3400000.100000
5867999.900000
''')
def read_data(fle):
out_str = ''
for (i, line) in enumerate(file0.readlines()):
if i != 4:
out_str += '{}\n'.format(line.strip())
else:
out_str += '{}\n'.format(line.strip()[1:])
return out_str
print(read_data(file0))
我不完全清楚你所说的“索引字符”是什么意思。在python中,字符串的行为类似于字符列表。您可以使用
string[5]
对单个字符进行寻址,或获取切片string[5:-1]
。这回答了你的问题吗?这就是你想要的:
import io
file0 = io.StringIO(''' 0.200000
0.000000
0.000000
-0.200000
3400000.100000
5867999.900000
''')
def read_data(fle):
out_str = ''
for (i, line) in enumerate(file0.readlines()):
if i != 4:
out_str += '{}\n'.format(line.strip())
else:
out_str += '{}\n'.format(line.strip()[1:])
return out_str
print(read_data(file0))
我不完全清楚你所说的“索引字符”是什么意思。在python中,字符串的行为类似于字符列表。您可以使用
string[5]
对单个字符进行寻址,或获取切片string[5:-1]
。这回答了你的问题吗?实际上,一个列表
对象是索引的。在您的代码中,第四个元素的第一个字符(如果我们从零开始计数)位于数据列表[4][0]
使用,data\u list[4][1:
将删除第4个元素的第一个字符
示例脚本:
用修改后的列表覆盖文件:
方式1:在写入模式下关闭和重新打开:
方法2:使用file.truncate()
以避免关闭和重新打开文件:
实际上,一个
列表
对象是索引的。在您的代码中,第四个元素的第一个字符(如果我们从零开始计数)位于数据列表[4][0]
使用,data\u list[4][1:
将删除第4个元素的第一个字符
示例脚本:
用修改后的列表覆盖文件:
方式1:在写入模式下关闭和重新打开:
方法2:使用file.truncate()
以避免关闭和重新打开文件:
实际上,一个
列表
对象是索引的。在您的代码中,第四个元素的第一个字符(如果我们从零开始计数)位于数据列表[4][0]
使用,data\u list[4][1:
将删除第4个元素的第一个字符
示例脚本:
用修改后的列表覆盖文件:
方式1:在写入模式下关闭和重新打开:
方法2:使用file.truncate()
以避免关闭和重新打开文件:
实际上,一个
列表
对象是索引的。在您的代码中,第四个元素的第一个字符(如果我们从零开始计数)位于数据列表[4][0]
使用,data\u list[4][1:
将删除第4个元素的第一个字符
示例脚本:
用修改后的列表覆盖文件:
方式1:在写入模式下关闭和重新打开:
方法2:使用file.truncate()
以避免关闭和重新打开文件:
您想要
str.lstrip
前导空格:
for fileName in filelist:
with open(fileName, "r" ) as f:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
将与
一起使用将自动关闭文件,而且'3400000.100000\n'
是列表中的第五个对象
我不知道在提取行之后您实际上在做什么,因为您在迭代时不将数据存储在任何位置,只需在每次迭代中重新分配新值。如果要将数据写入文件,则使用列表中的file.writelines
进行迭代时写入:
for fileName in filelist:
with open(fileName, "r" ) as f, open("{}_new".format(fileName),w") as out:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
out.writelines(lines)
如果您想替换原来的,请使用
您想要
str.lstrip
前导空格:
for fileName in filelist:
with open(fileName, "r" ) as f:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
将与
一起使用将自动关闭文件,而且'3400000.100000\n'
是列表中的第五个对象
我不知道在提取行之后您实际上在做什么,因为您在迭代时不将数据存储在任何位置,只需在每次迭代中重新分配新值。如果要将数据写入文件,则使用列表中的file.writelines
进行迭代时写入:
for fileName in filelist:
with open(fileName, "r" ) as f, open("{}_new".format(fileName),w") as out:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
out.writelines(lines)
如果您想替换原来的,请使用
您想要
str.lstrip
前导空格:
for fileName in filelist:
with open(fileName, "r" ) as f:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
将与
一起使用将自动关闭文件,而且'3400000.100000\n'
是列表中的第五个对象
我不知道在提取行之后您实际上在做什么,因为您在迭代时不将数据存储在任何位置,只需在每次迭代中重新分配新值。如果要将数据写入文件,则使用列表中的file.writelines
进行迭代时写入:
for fileName in filelist:
with open(fileName, "r" ) as f, open("{}_new".format(fileName),w") as out:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
out.writelines(lines)
如果您想替换原来的,请使用
您想要
str.lstrip
前导空格:
for fileName in filelist:
with open(fileName, "r" ) as f:
lines = [line.lstrip() for line in f]
lines[4] = lines[4][1:]
将与
一起使用将自动关闭文件,而且'3400000.100000\n'
是列表中的第五个对象
我不知道你是什么