天道酬勤,学无止境

在 Python 中写入和读取临时文件时出现 EmptyDataError(EmptyDataError while writing and reading from temporary file in Python)

问题

我通过创建临时中间文件将一种文件格式转换为另一种文件格式。 以下是我的代码:

import tempfile
import pandas as pd
from pandas import DataFrame
def convert_binary_step1(file1,file2,file3):
   source=open(file1)
   SampleList=convert_file_to_list(file2)
   dest=open(file3,'w')
   ti= tempfile.NamedTemporaryFile(delete=False)
   l=[]    
   for line in source:
      a=line.split()
      del a[-1]
      for i in range(len(SampleList)):
          if SampleList[i] in a:
                 l.append("1")
          else:
                 l.append("0")
     data=a[0]+"\t"+"\t".join(l)+"\n"
     ti.write(data.encode("utf-8"))
     del l[:]
  source1=pd.read_csv(ti,sep="\t",encoding='utf-8',header=None)
  dest=source1.transpose()
  dest.to_csv(file3,sep="\t",header=None,index=None)
  source.close()
  dest.close()
  ti.close()
def convert_file_to_list(file2):
  source11=open(file2)
  li=[]
  for lin in source11:
      b=lin.split()
      li+=[b[0]]
  return li
  source11.close()

但是,代码正在生成错误 - EmptyDataError: No columns to parse from file

回答1

试试这个 - 它会返回到文件的顶部:

file.seek(0)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如果 csv 为空,如何不读取_csv(how to NOT read_csv if csv is empty)
    问题 使用 Python 2.7 和 Pandas 我必须解析我的目录并绘制一堆 CSV。 如果 CSV 为空,脚本会中断并生成错误消息: pandas.io.common.EmptyDataError: No columns to parse from file 如果我将文件路径存储在 file_paths=[] 我如何通读每一个并只绘制非空的 CSV? 如果我有一个定义为 df=[] 的空数据框,我会尝试以下代码 for i in range(0,len(file_paths)): if pd.read_csv(file_paths[i] == ""): print "empty" else df.append(pd.read_csv(file_paths[i],header=None)) 回答1 您可以使用内置的try和except语法跳过返回错误的文件,如下所示: 此处描述:Python 中的 Try/Except:您如何正确忽略异常? for i in range(0,len(file_paths)): try: pd.read_csv(file_paths[i]) ### Do Some Stuff except: continue # or pass 这将尝试读取每个文件,如果不成功则继续读取下一个文件。 回答2 我只会捕获适当的异常,因为在 python
  • 解析没有列的空文件(parsing empty file with no columns)
    问题 我有一个函数可以读取文本文件,然后将其解析为数据框。 通常输入文件将是这样的: A B M 1 2 100 2 1 20 我希望能够解析一个不包含任何内容的文本文件,并返回一个空的数据框,但它不允许我这样做,并且在使用 python pandas 读取文件的行中出现错误。 还有其他方法吗? import pandas as pd def read_data(file): df = pd.read_csv(file, delim_whitespace=True) return df 错误: pandas.io.common.EmptyDataError: No columns to parse from file 回答1 您可以通过多种方法验证文件是否为空或格式不正确。 但是,您也可以只捕获异常并返回一个空数据框。 from pandas.io.common import EmptyDataError def read_data(file): try: df = pd.read_csv(file, delim_whitespace=True) except EmptyDataError: df = pd.DataFrame() return df 回答2 只需吃掉异常并创建一个空的df: def read_data(file): try: df = pd.read_csv
  • EmptyDataError while writing and reading from temporary file in Python
    I am converting one file format into another file format by creating a temporary intermediate file. Following are my codes: import tempfile import pandas as pd from pandas import DataFrame def convert_binary_step1(file1,file2,file3): source=open(file1) SampleList=convert_file_to_list(file2) dest=open(file3,'w') ti= tempfile.NamedTemporaryFile(delete=False) l=[] for line in source: a=line.split() del a[-1] for i in range(len(SampleList)): if SampleList[i] in a: l.append("1") else: l.append("0") data=a[0]+"\t"+"\t".join(l)+"\n" ti.write(data.encode("utf-8")) del l[:] source1=pd.read_csv(ti,sep="
  • sys.dm_db_wait_stats
    sys.dm_db_wait_stats返回在操作期间执行的线程所遇到的所有等待的相关信息。 可以使用此聚合视图来诊断 Azure SQL Database 以及特定查询和批处理的性能问题。执行查询期间的特定等待时间类型可以说明查询中存在瓶颈或失效点。 同样,如果服务器级的等待时间较长或等待计数较多,说明服务器实例内交互查询交互中存在瓶颈或热点。 例如,锁等待指示查询争用数据;页 IO 闩锁等待指示 IO 响应时间较慢;页闩锁更新指示表示文件布局不正确。列名数据类型说明wait_typenvarchar(60)等待类型的名称。 有关详细信息,请参阅本主题后面等待类型部分的内容。waiting_tasks_countbigint该等待类型的等待数。 该计数器在每开始一个等待时便会增加。wait_time_msbigint该等待类型的总等待时间(毫秒)。 此时间包括 signal_wait_time_ms。max_wait_time_msbigint该等待类型的最长等待时间。signal_wait_time_msbigint正在等待的线程从收到信号通知到其开始运行之间的时差。备注 此动态管理视图只显示当前数据库的数据。此动态管理视图显示已完成的等待的时间。 它不显示当前等待。只要数据库转入或进入离线状态,计数器就会重置为零。如果出现下列任一情况,则不认为 SQL Server
  • 打开已打开的文件时出现异常(Exception in opening a file that is already open)
    问题 我正在C#中构建一个应用程序,在该应用程序中,我必须打开CSV文件才能从中读取数据。 当我已经在Excel中打开该文件时,尝试从C#打开CSV文件时出现异常。 异常表示该进程无法访问该文件,因为该文件已经打开。 即使在其他应用程序中打开了文件,我该如何解决该问题并打开文件? 谢谢,拉克什。 回答1 我前段时间遇到了这个问题。 您缺少FileShare参数。 如果未指定,则打开文件时,该文件将被您的应用程序独占锁定。 但是,由于它已经被Excel(或任何其他应用程序)打开,您将收到一个异常。 您可以尝试使用此功能-我认为这是您最好的选择- using (FileStream fs = File.Open(<file-path>, FileMode.Open, FileAccess.Read, FileShare.Read)) 这段代码说:您好,Excel! 如果您允许(读取,但不引发异常),我想读取该文件,尽管我不会尝试拥有它,并且我知道您可以随时对其进行修改。 如果这引发错误,则Excel甚至拒绝了您的读取访问权限。 那太可惜了! 祝一切顺利。 回答2 可以,但是您必须仔细控制指定的文件共享。 大多数.NET类默认为FileShare.Read,拒绝另一个进程写入文件。 但是,如果该文件由Excel打开,则该文件已经获得了对该文件的写访问权,因此无法使用。
  • Azure storage get_blob_to_stream cant download saved csv file as stream
    I want to download a CSV file stored in Azure storage into a stream and directly used in my python script, but after I did this with help from Thomas, I cannot use pandas read_csv method, the error message is: pandas.io.common.EmptyDataError: No columns to parse from file,thus I assume the download CSV stream is actually empty, but after check in storage account, the CSV file is fine with all data inside it, what the problem here? below is the code from Thomas: from azure.storage.blob import BlockBlobService import io from io import BytesIO, StringIO import pandas as pd from shutil import
  • 读取CSV文件时出现UnicodeDecodeError :(“ utf-8”编解码器)(UnicodeDecodeError: ('utf-8' codec) while reading a csv file [duplicate])
    问题 这个问题已经在这里有了答案: 使用Python在Pandas中读取CSV文件时出现UnicodeDecodeError (22个答案) 3年前关闭。 我正在尝试读取csv以制作数据框-在列中进行更改-再次将更改后的值更新/反映到同一csv(to_csv)中-再次尝试读取该csv以制作另一个数据框...有我遇到错误 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte 我的代码是 import pandas as pd df = pd.read_csv("D:\ss.csv") df.columns #o/p is Index(['CUSTOMER_MAILID', 'False', 'True'], dtype='object') df['True'] = df['True'] + 2 #making changes to one column of type float df.to_csv("D:\ss.csv") #updating that .csv df1 = pd.read_csv("D:\ss.csv") #again trying to read that csv UnicodeDecodeError: 'utf-8'
  • 在 Pillow 中打开和加载图像时出现“打开的文件太多”错误(“Too many open files” error when opening and loading images in Pillow)
    问题 运行以下代码时: KEEP=[] for file in glob.glob("./KEEP/thing*.[tT][iI][fF]"): m = pattern.search(file) filename=m.group(1) keep=Image.open(file) keep.load() KEEP.append(keep) KEEP_NAMES.append(filename) keep.close() 超过一千个文件,我收到错误消息: Traceback (most recent call last): File "/hom/yannis/texmf/python/remove-harakat.py", line 123, in <module> File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 2237, in open IOError: [Errno 24] Too many open files: './KEEP/thing1118_26.TIF' 我不明白为什么会发生这种情况,因为我正在加载()然后关闭()所有文件,为什么它们应该保持打开状态? 除了减少文件数量(这对我来说不是一个选项)之外,是否有解决此问题的方法? 在内存中读取内容后关闭它们的某种方法? 回答1
  • 如何创建一个可由子进程读取的临时文件?(How to create a temporary file that can be read by a subprocess?)
    问题 我正在编写一个Python脚本,该脚本需要将一些数据写入临时文件,然后创建一个运行C ++程序的子进程,该程序将读取该临时文件。 我正在尝试为此使用NamedTemporaryFile,但是根据文档, 在命名的临时文件仍处于打开状态时,是否可以使用该名称第二次打开文件,会因平台而异(可以在Unix上使用;在Windows NT或更高版本上不能使用)。 实际上,在Windows上,如果我在写入后刷新了临时文件,但是在我希望它消失之前不要关闭它,则子进程将无法打开它进行读取。 我正在通过使用delete=False创建文件来解决此问题,在生成子进程之前将其关闭,然后在完成后手动将其删除: fileTemp = tempfile.NamedTemporaryFile(delete = False) try: fileTemp.write(someStuff) fileTemp.close() # ...run the subprocess and wait for it to complete... finally: os.remove(fileTemp.name) 这似乎不雅。 有一个更好的方法吗? 也许是一种打开临时文件权限以便子进程可以使用它的方法吗? 回答1 至少如果您使用现有的Python库打开一个临时文件,则在Windows中无法从多个进程访问该文件。 根据MSDN
  • MemoryStream 写入时出现 OutOfMemoryException(OutOfMemoryException on MemoryStream writing)
    问题 我有一个小示例应用程序,我正在努力尝试让一些新的 .Net 4.0 Parallel Extensions 运行起来(它们非常好)。 我遇到了 OutOfMemoryException 的(可能真的很愚蠢)问题。 我希望将此示例插入的主要应用程序读取一些数据和大量文件,对它们进行一些处理,然后将它们写到某处。 我遇到了文件变大(可能是 GB)的一些问题,并且担心内存,所以我想并行化导致我走上这条路的事情。 现在下面的代码在较小的文件上得到了一个 OOME,我想我只是错过了一些东西。 它将读取 10-15 个文件并将它们很好地并行写出,但随后它会在下一个文件中窒息。 看起来它的读取和写入大约为 650MB。 第二组眼睛将不胜感激。 我正在从 FileStream 读取 MemorySteam,因为这是主应用程序所需要的,我只是想在某种程度上复制它。 它从所有类型的地方读取数据和文件,并将它们作为 MemoryStreams 处理。 这是使用 .Net 4.0 Beta 2,VS 2010。 namespace ParellelJob { class Program { BlockingCollection<FileHolder> serviceToSolutionShare; static void Main(string[] args) { Program p = new
  • 读取文本文件时出现UnicodeDecodeError(UnicodeDecodeError when reading a text file)
    问题 我是Python的初学者(我正在使用3.4)。 这是我的代码的相关部分。 fileObject = open("countable nouns raw.txt", "rt") bigString = fileObject.read() fileObject.close() 每当我尝试读取此文件时,我都会得到: UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 82273: character maps to <undefined> 我一直在阅读,这似乎与我的默认编码不匹配文本文件编码有关。 我读过另一篇文章,您可以使用此方法来读取具有特定编码的文件: import codecs f = codecs.open("file.txt", "r", "utf-8") 但是您必须事先知道。 问题是我不知道文本文件是如何编码的。 建议使用Chardet的一些帖子。 我已经安装了它,但是我不知道如何获取它来读取文本文件。 关于如何解决这个问题的任何想法? 回答1 无需使用codecs.open() ; 这是对Python 2的建议。 在Python 3中, open()采用encoding参数: fileObject = open("countable nouns raw.txt", "rt"
  • 同时读取和写入文件(Reading and Writing to a file simultaneously)
    问题 我有一个用 System Verilog 编写的模块,它将 SRAM 的内容转储到一个文件中。 我想从这个文件中读取数据,并在一个用 python 编写的单独程序中使用这些数据,但是是实时的。 我对 verilog 代码的编写没有太多控制权。 是否有可能以某种方式管理这两个读写? 目前,当它从文件中读取时,在每一行的开头插入了一个(看似)随机数,这会导致解析失败。 我假设这些前缀只在它们同时读取和写入时出现,因为如果我运行它们都非常慢,它就可以正常工作。 window = Tk() canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg="#000000") canvas.pack() img = PhotoImage(width=WIDTH, height=HEIGHT) canvas.create_image((WIDTH/2, HEIGHT/2), image=img, state="normal") def redraw(): fp = open('test_data.txt','r') lines=fp.readlines() for i in range(len(lines)): #do stuff fp.close() window.after(35,redraw) window.after(35
  • 尝试在 Android 中将文件写入 sdcard 时出现 FileNotFoundException(权限被拒绝)(FileNotFoundException (permission denied) when trying to write file to sdcard in Android)
    问题 正如您从标题中注意到的,我在 Android 中将文件写入 sdcard 时遇到问题。 我已经检查了这个问题,但它对我没有帮助。 我想在 sdcard 上的公共空间中写入文件,以便任何其他应用程序都可以读取它。 首先,我检查是否安装了 sdcard: Environment.getExternalStorageState(); 然后,我运行此代码: File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); baseDir.mkdirs(); File file = new File(baseDir, "file.txt"); try { FileOutputStream out = new FileOutputStream(file); out.flush(); out.close(); Log.d("NEWFILE", file.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } 我有: <manifest> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 尝试将大型json数据发送到android中的服务器时出现OutOfMemoryException?(OutOfMemoryException while trying to send large json data to server in android?)
    问题 我正在尝试一次向 PHP 服务器发送多个 Json 字符串 [每个 1 MB]。 当我尝试发送 10 条记录时,它工作正常。 但如果超过 20 条记录,它会显示OutOfMemoryException 。 我看到android内存大小限制为t0 15MB - 16MB。 但是没有任何线索如何解决这个问题,我使用下面的代码一次发送多条记录。 /** Upload Data*/ private void submitUploadData(String url, Map<String, String> param) throws IOException { URL siteUrl; try { siteUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) siteUrl .openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); DataOutputStream out = new DataOutputStream(conn.getOutputStream()); String content1 = ""; Set getkey = param.keySet()
  • SQLite并发访问(SQLite Concurrent Access)
    问题 SQLite3是否可以安全地处理从同一数据库读取/写入的多个进程的并发访问? 有平台例外吗? 回答1 如果大多数并发访问是读取的(例如SELECT),则SQLite可以很好地处理它们。 但是,如果您开始同时进行写入,则锁争用可能会成为问题。 然后,很大程度上取决于文件系统的速度,因为SQLite引擎本身非常快,并且具有许多巧妙的优化方法可以最大程度地减少争用。 特别是SQLite 3。 对于大多数台式机/笔记本电脑/平板电脑/电话应用程序,由于没有足够的并发性,因此SQLite足够快。 (Firefox将SQLite广泛用于书签,历史记录等。) 对于服务器应用程序,前段时间有人说,在典型情况下(例如,博客,论坛),SQLite数据库可以完美地处理每天少于10万的页面浏览量,而我还没有看到任何相反的证据。 实际上,使用现代磁盘和处理器,95%的网站和Web服务都可以在SQLite上正常工作。 如果您想要真正快速的读/写访问,请使用内存中的SQLite数据库。 RAM比磁盘快几个数量级。 回答2 是的,它确实。 让我们找出原因 SQLite是事务性的 SQLite中单个事务中的所有更改要么完全发生,要么根本不发生 此类ACID支持以及并发读/写以两种方式提供-使用所谓的日志记录(称为“旧方法”)或预写日志记录(称为“新方法”) 日记(旧方法) 在这种模式下
  • 写入文件时出现 UnicodeEncodeError(UnicodeEncodeError when writing to file)
    问题 我有一个在我的本地机器 (OS X) 上运行良好的 python 脚本,但是当我将它复制到服务器 (Debian) 时,它没有按预期工作。 该脚本读取 xml 文件并以新格式打印内容。 在我的本地机器上,我可以将带有 stdout 的脚本运行到终端或文件(即> myFile.txt ),并且两者都可以正常工作。 但是,在服务器( ssh )上,当我打印到终端时一切正常,但是打印到文件(这是我真正需要的)会给出 UnicodeEncodeError: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) 。 所有文件都是utf-8编码,utf-8在magic注释中声明。 如果我在列表中打印str对象(这是我通常用来处理编码问题的技巧),它也会引发相同的错误。 如果我使用print( x.encode('utf-8') ) ,那么它会打印代码样式位(例如b'1' b'\xd0\x9a\xd0\xb0\xd0\xbc\xd0\xb0' ) . 如果我在 shell 中$ export PYTHONIOENCODING=utf-8 (如某些 SO 帖子中所建议的那样),那么我会得到一个二进制文件: 1 <D0><9A><D0><B0>
  • JAVA - 在 jxl 中写入 Excel 单元格时出现内存不足错误(JAVA - Out Of Memory Error while writing Excel Cells in jxl)
    问题 我正在使用 JXL 编写一个 50000 行和 30 列的 excel 文件。 我的代码如下所示: for (int j = 0; j < countOfRows; j++) { myWritableSheet.addCell(new Label(0, j, myResultSet.getString(1), myWritableCellFormat)); myWritableSheet.addCell(new Label(1, j, myResultSet.getString(2), myWritableCellFormat)); ..... ..... } 写入单元格时,程序运行越来越慢 最后在 25000 行附近,我收到以下错误: 线程“Thread-3”中的异常 java.lang.OutOfMemoryError:jxl.write.biff.WritableSheetImpl.getRowRecord(WritableSheetImpl.java:984) 处的 Java 堆空间 jxl.write.biff.WritableSheetImpl.addCell(WritableSheetImpl.java:951) ) 在 KLL.ConverterMainFrame$exportToXLSBillRightsThread.run
  • 将 txt 转换为 xlsx 时出现内存错误(MemoryError while converting txt to xlsx)
    问题 相关问题:1.使用python将txt转换为xlsx时出错 将数字单元格的单元格属性设置为数字时将 txt 转换为 xlsx 我的代码是 import csv import openpyxl import sys def convert(input_path, output_path): """ Read a csv file (with no quoting), and save its contents in an excel file. """ wb = openpyxl.Workbook() ws = wb.worksheets[0] with open(input_path) as f: reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE) for row_index, row in enumerate(reader, 1): for col_index, value in enumerate(row, 1): ws.cell(row=row_index, column=col_index).value = value print 'hello world' wb.save(output_path) print 'hello world2' def main(): try: input_path
  • 为什么在读取一个空文件时出现“ Pickle-EOFError:Ran out of input”的问题?(Why do I get “Pickle - EOFError: Ran out of input” reading an empty file?)
    问题 尝试使用Unpickler.load()时遇到一个有趣的错误,这是源代码: open(target, 'a').close() scores = {}; with open(target, "rb") as file: unpickler = pickle.Unpickler(file); scores = unpickler.load(); if not isinstance(scores, dict): scores = {}; 这是回溯: Traceback (most recent call last): File "G:\python\pendu\user_test.py", line 3, in <module>: save_user_points("Magix", 30); File "G:\python\pendu\user.py", line 22, in save_user_points: scores = unpickler.load(); EOFError: Ran out of input 我尝试读取的文件为空。 如何避免出现此错误,而是获取一个空变量? 回答1 我先检查文件是否为空: import os scores = {} # scores is an empty dict already if os.path.getsize(target)
  • 如何在不使用临时文件的情况下在python中的tarfile中写入大量数据(How to write a large amount of data in a tarfile in python without using temporary file)
    问题 我在 python 中编写了一个小型加密模块,其任务是加密文件并将结果放入 tarfile 中。 要加密的原始文件可以很大,但这不是问题,因为我的程序一次只需要处理一小块数据,可以即时加密和存储。 我正在寻找一种避免分两次执行的方法,首先将所有数据写入临时文件,然后将结果插入 tarfile。 基本上我执行以下操作(其中 generator_encryptor 是一个简单的生成器,它产生从源文件读取的数据块)。 : t = tarfile.open("target.tar", "w") tmp = file('content', 'wb') for chunk in generator_encryptor("sourcefile"): tmp.write(chunks) tmp.close() t.add(content) t.close() 我有点恼火必须使用临时文件,因为我将文件直接写入 tar 文件应该很容易,但是在单个字符串中收集每个块并使用类似 t.addfile('content', StringIO( bigcipheredstring) 似乎被排除在外,因为我不能保证我有足够的内存来存储旧的 bigcipheredstring。 任何提示如何做到这一点? 回答1 您可以创建自己的类似文件的对象并传递给 TarFile.addfile。 您的类文件对象将在