Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过索引从列表中的多行中删除特定字符_Python_List_Indexing - Fatal编程技术网

Python 通过索引从列表中的多行中删除特定字符

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',

我有一个包含多个ascii编码txt文件的文件夹,希望打开所有这些文件,读取所有行,写入文件并删除空白(如果有),同时更改/删除列表中第四个对象的第一个数字

一个文件内容如列表所示:

['        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'
是列表中的第五个对象

我不知道你是什么